I. 登录名与用户名
登录名: 访问数据库服务器的账户。登录名可以登录到服务器,但不能直接访问数据库内容。数据库连接串中的用户名应配置为登录名。每个登录名的定义存放在master数据库的syslogins表中。
用户: 访问数据库内容的账户。一个登录名可以映射数据库中的一个用户(且仅能映射一个),从而使登录名具有了访问数据库的权限。用户定义信息存放在每个数据库的sysusers表中。
SQLSERVER把登录名与用户的关系称为映射。用登录名登录SQLSERVER后,在访问各个数据库时,SQLSERVER会自动查询此数据库中是否存在与此登录名映射的用户名,若存在就使用此用户的权限访问此数据库,若不存在就是用guest用户访问此数据库。
可以把一个数据库服务器理解为一个大楼,而每个数据库就是一个房间。所以登录名就是进入大楼的钥匙,而用户是进入房间的钥匙。有人会质疑,为什么要设两把钥匙,而不是直接分配房间的钥匙。有一个不错的解释是:“大楼的钥匙可以在大楼内建立房间/删除房间,以及配置整个大楼的安保等功能。而用户只能对自己的房间进行收拾。”
参见:
http://www.cnblogs.com/ibrahim/archive/2010/06/21/sqlserver_loginname_username.html
http://bbs.csdn.net/topics/360239408?page=1
II. 角色与架构
服务器角色: 对一组服务器操作权限的定义。一个登录名具有某一服务器角色就意味着此登录名具有此角色所定义的操作权限。
数据库角色: 对一组数据库操作权限的定义。一个用户具有某一数据库角色就意味着此用户具有此角色所定义的操作权限。
架构: 指数据库对象的容器,相当于数据库对象的命名空间。用户通过架构访问数据库对象。(在访问数据库对象时如果不加构架限制,则缺省设为“dbo”。)
一个数据库角色或用户拥有某一架构意味着此角色或用户有权访问此架构下的所有对象。系统预定义的每个数据库角色(除public)都拥有一个同名的架构,且此拥有关系不能修改。
参见:
http://www.cnblogs.com/50614090/archive/2010/12/16/1908636.html
参见一篇讨论较充分的文章(后面有一些重要的脚本命令说明):
http://blog.csdn.net/yu0089/article/details/9195295