sp_addrolemember (Transact-SQL)

适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库 是Azure SQL 托管实例 是Azure Synapse Analytics 是并行数据仓库

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

重要

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

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

语法

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

备注

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

参数

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

[ @membername =] "security_account"
添加到该角色中的安全帐户。 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 AdventureWorks2012 作为用户添加到数据库中 Mary5 。 用户 Mary5 随即被添加到 Production 角色中。

备注

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

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

B. 添加数据库用户

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

EXEC sp_addrolemember 'Production', 'Mary5';  

示例:Analytics Platform System (PDW)

C. 添加 Windows 登录名

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

备注

因为登录名 LoginMary 称为数据库中的数据库用户 UserMary ,所以 AdventureWorks2012 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 SQL)
sp_grantdbaccess (Transact-SQL)
系统存储过程 (Transact-SQL)
数据库级别的角色