sp_addrolemember (Transact-SQL)
适用于:SQL Server (所有受支持的版本)
Azure SQL 数据库 azure SQL
托管实例 azure Synapse analytics
分析平台
系统 (PDW)
为当前数据库中的数据库角色添加数据库用户、数据库角色、Windows 登录名或 Windows 组。
重要
后续版本的 Microsoft SQL Server 将删除该功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用 ALTER ROLE 。
语法
sp_addrolemember [ @rolename = ] 'role', [ @membername = ] 'security_account'
注意
Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。
参数
[ @rolename= ] "@rolename="
当前数据库中的数据库角色的名称。 role 是 sysname,无默认值。
[ @membername= ] '@membername='
添加到该角色中的安全帐户。 security_account 是 sysname,无默认值。 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
必须指定用户名 Mary5
。 Mary5
如果没有 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)
数据库级别的角色