关于什么是用户权限,最简单的定义可能是,“用户能做什么和不能做什么。”在这里,简单的定义就相当不错了。
用户的权限分为3类:
l 登录的权限;
l 访问特定数据库的权限;
l 在数据库中具体的对象上执行特定操作的权限。
既然我们已经看过了创建登录账户,这里将把重点放在登录账户能够拥有的特定权限上。
22.3.1 授予访问特定数据库的权限
如果想要一个用户可以访问数据库,你需要做的第一件事情是授予用户访问那个数据库的权限。可以在Management Studio中,通过把用户加入到服务器的数据库结点的用户成员中来实现。如果要用T-SQL来添加用户,需要使用CREATE USER或遗留的存储过程sp_grantdbaccess。
注意,当你在数据库中CREATE一个用户时,实际上,那些许可权限被存储在数据库中,并映射到那个用户的服务器标识符上。当还原数据库时,可能不得不在还原数据库的地方,重新把用户权限映射到服务器标识符。
1.CREATE USER
CREATE USER命令把新用户添加到数据库中。用户可以源自现有的登录名、证书或非对称密钥,用户也可以是只能在当前数据库中的本地用户。其语法如下:
CREATE USER <用户名>
[ { { FOR | FROM }
{
LOGIN <登录名>
| CERTIFICATE <证书名>
| ASYMMETRIC KEY <密钥名>
}
| WITHOUT LOGIN ]
[ WITH DEFAULT_SCHEMA = <模式名> ]
对于这些元素,我们概略看一下其中一些元素的含义是什么:
选 项
说 明
LOGIN
想要授予访问当前数据库的权限的登录名
CERTIFICATE
与用户关联的证书的逻辑名称。注意,必须已经使用CREATE CERTIFICATE命令创建了证书
ASYMMETRIC KEY
与用户关联的非对称密钥的逻辑名称。注意,必须已经使用CREATE ASYMMETRIC KEY命令创建了密钥
WITHOUT LOGIN
创建只能在当前数据库中活动的用户。可以用它来建立特定的安全上下文,但是,该用户不能映射到当前数据库之外的登录名,也不能访问任何其他的数据库
WITH DEFAULT_SCHEMA
设立不是默认的“dbo”的模式,以作为当前用户的默认模式
2.sp_grantdbaccess
这是遗留的方法,用来授予登录名到特定数据库的访问权限。其语法如下:
sp_grantdbaccess [@loginame =] <‘登录名’>[, [@name_in_db =] <‘数据库中的别名’>
注意,授予的是当前数据库的访问权限——即是说,你 必须确保想要用户能够访问的数据库是发出该命令时的当前数据库。登录名是用来登录到SQL Server中的实际的登录ID。参数name_in_db允许给该用户另外的识别名称。这个别名只适用于此处的数据库——其他所有的数据库仍将使用该登 录ID的默认名称,或者使用在授予用户那个数据库的访问权限时所定义的别名。定义别名将影响身份识别函数,如USER_NAME()。系统级别的函数(如 SYSTEM_USER)将返回基础的登录ID。










