sp_addrolemember (Transact-SQL)

适用于:yesSQL Server (所有受支持的版本) Yes Azure SQL 数据库 azure SQL yes 托管实例 azure Synapse analytics yes 分析平台 Yes 系统 (PDW)

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

重要

后续版本的 Microsoft SQL Server 将删除该功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用 ALTER ROLE

Topic link iconTransact-SQL 语法约定

语法

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

注意

Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。

参数

[ @rolename= ] "@rolename="
当前数据库中的数据库角色的名称。 rolesysname,无默认值。

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

返回代码值

0(成功)或 1(失败)

备注

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

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

sp_addrolemember 无法将固定数据库角色、固定服务器角色或 dbo 添加到角色。

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

权限

为灵活的数据库角色添加成员需要满足以下条件之一:

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

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

  • 对角色具有ALTER ANY role权限或alter权限。

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

示例

A. 添加 Windows 登录名

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

注意

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

USE AdventureWorks2012;  
GO  
CREATE USER Mary5 FOR LOGIN [Contoso\Mary5] ;  
GO  

B. 添加数据库用户

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

EXEC sp_addrolemember 'Production', 'Mary5';  

示例:分析平台系统 (PDW)

C. 添加 Windows 登录名

下面的示例将登录名 LoginMary 作为用户 UserMary 添加到 AdventureWorks2008R2 数据库中。 用户 UserMary 随即被添加到 Production 角色中。

注意

因为登录名 LoginMary 在 AdventureWorks2012 数据库中称为数据库用户 UserMary ,所以必须指定用户名 UserMary 。 如果没有 Mary5 登录名存在,语句将失败。 登录名和用户通常具有相同的名称。 此示例使用不同的名称来区分影响登录名和用户的操作。

-- Uses AdventureWorks  
  
CREATE USER UserMary FOR LOGIN LoginMary ;  
GO  
EXEC sp_addrolemember 'Production', 'UserMary'  

D. 添加数据库用户

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

EXEC sp_addrolemember 'Production', 'UserMary'  

另请参阅

安全存储过程 (Transact-SQL)
sp_addsrvrolemember (Transact-SQL)
sp_droprolemember (Transact-SQL)
sp_grantdbaccess (Transact-SQL)
系统存储过程 (Transact-SQL)
数据库级别的角色