登录:服务器方的一个实体,使用一个 登录名只能进入服务器,但是不能让用户访问服务器中的数据库资源。每个 登录名的定义存放在master数据库的syslogins表中
用户:一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。用户定义信息存放在每个数据库的sysusers表中。
一个登录名可以被授权访问多个数据库,但一个登录名在每个数据库中只能映射一次。即一个登录可对应多个用户,一个用户也可以被多个登录使用。
可以把登录对象比作是驾驶证,把用户对象比作是汽车钥匙来帮助理解。
如果没有为一个登录指定数据库用户,则登录时系统将试图将该登录名映射成guest用户(如果当前的数据库中有guest用户的话)。如果还是失败的话,这个用户将无法访问数据库。
在我的SQL server 2000中:
登录:
没有发现guest登录用户名
数据库用户:
发现有guest用户名(不是登录名)
我个人的理解是这样的:
数据库中的guest用户与登录名guest无关,我们在这里也没有设置guest登录名,否则所有的用户都可以通过guest来登录服务器了。
我们发现在图2中,用户名guest对应的登录名为空,空的含义不是用户可以没有登录名而通过guest来登录,而是必须用户按指定的
登录名进行登录之后,如果没有为该登录名指定数据库用户名,则该登录名可以使用数据库用户中的guest用户名进行相应的数据库操作。
空意味着ANY而不是NULL