sp_addrolemember (Transact-SQL)

为当前数据库中的数据库角色添加数据库用户、数据库角色、Windows 登录名或 Windows 组。

主题链接图标Transact-SQL 语法约定

语法

sp_addrolemember [ @rolename = ] 'role',
    [ @membername = ] 'security_account'

参数

  • [ @rolename= ] 'role'
    当前数据库中的数据库角色的名称。role 数据类型为 sysname,无默认值。

  • [ @membername= ] 'security_account'
    是添加到该角色的安全帐户。security_account 数据类型为 sysname,无默认值。 security_account 可以是数据库用户、数据库角色、Windows 登录或 Windows 组。

返回代码值

0(成功)或 1(失败)

注释

使用 sp_addrolemember 添加到角色中的成员继承该角色的权限。如果新成员是没有对应数据库用户的 Windows 级主体,则将创建数据库用户,但数据库用户可能不会完全映射到登录名。始终应检查登录名是否存在以及是否能访问数据库。

角色不能将自身包含为成员。即使这种成员关系仅由一个或多个中间成员身份间接地体现,这种“循环”定义也无效。

sp_addrolemember 不能为角色添加固定数据库角色、固定服务器角色或 dbo。不能在用户定义的事务中执行 sp_addrolemember。

只能使用 sp_addrolemember 为数据库角色添加成员。若要向服务器角色添加成员,请使用sp_addsrvrolemember (Transact-SQL)

权限

为数据库用户定义的角色添加成员需要满足以下条件之一:

  • 具有 db_securityadmin 或 db_owner 固定数据库角色的成员身份。

  • 具有拥有该角色的角色的成员身份。

  • 具有对角色的 ALTER ANY ROLE 权限或 ALTER 权限。

为固定数据库角色添加成员要求具有 db_owner 固定数据库角色的成员身份。

示例

A.添加 Windows 登录

下例将 Windows 登录名 Contoso\Mary5 作为用户 Mary5 添加到 AdventureWorks2008R2 数据库中。用户 Mary5 随即被添加到 Production 角色中。

注意注意

因为 Contoso\Mary5 在 AdventureWorks2008R2 数据库中被识别为数据库用户 Mary5,所以必须指定用户名 Mary5。如果没有 Contoso\Mary5 登录名存在,该语句将失败。请通过使用您的域中的登录名进行测试。

USE AdventureWorks2008R2;
GO
CREATE USER Mary5 FOR LOGIN [Contoso\Mary5] ;
GO
EXEC sp_addrolemember 'Production', 'Mary5'

B.添加数据库用户

以下示例将数据库用户 Mary5 添加到当前数据库的 Production 数据库角色中。

EXEC sp_addrolemember 'Production', 'Mary5'