sp_addrolemember (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
为当前数据库中的数据库角色添加数据库用户、数据库角色、Windows 登录名或 Windows 组。
重要
在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用 ALTER ROLE 。
语法
sp_addrolemember
[ @rolename = ] N'rolename'
, [ @membername = ] N'membername'
[ ; ]
注意
Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。
参数
[ @rolename = ] N'rolename'
当前数据库中数据库角色的名称。 @rolename 为 sysname,无默认值。
[ @membername = ] N'membername'
要添加到角色的安全帐户。 @membername为 sysname,没有默认值。 @membername可以是数据库用户、数据库角色、Windows 登录名或 Windows 组。
返回代码值
0
(成功)或 1
(失败)。
注解
通过使用 sp_addrolemember
继承角色的权限添加到角色的成员。 如果新成员是没有相应数据库用户的 Windows 级别主体,则会创建数据库用户,但可能不会完全映射到登录名。 始终应检查登录名是否存在以及是否能访问数据库。
角色不能将自身作为成员包含在内。 此类 循环 定义无效,即使一个或多个中间成员身份间接隐含成员身份也是如此。
sp_addrolemember
无法将固定数据库角色、固定服务器角色或 dbo 添加到角色。
sp_addrolemember
仅用于将成员添加到数据库角色。 若要将成员添加到服务器角色,请使用 sp_addsrvrolemember (Transact-SQL)。
权限
将成员添加到灵活数据库角色需要以下权限之一:
db_securityadmin或db_owner固定数据库角色的成员身份。
具有拥有该角色的角色的成员身份。
ALTER ANY ROLE
对角色的权限或ALTER
权限。
将成员添加到固定数据库角色需要db_owner固定数据库角色的成员身份。
示例
A. 添加 Windows 登录名
以下示例将 Windows 登录Contoso\Mary5
名作为用户Mary5
添加到AdventureWorks2022
数据库。 用户 Mary5
随即被添加到 Production
角色中。
因为 Contoso\Mary5
在 AdventureWorks2022
数据库中被识别为数据库用户 Mary5
,所以必须指定用户名 Mary5
。 除非存在登录名, Contoso\Mary5
否则该语句将失败。 请通过使用您的域中的登录名进行测试。
USE AdventureWorks2022;
GO
CREATE USER Mary5 FOR LOGIN [Contoso\Mary5];
GO
B. 添加数据库用户
以下示例将数据库用户 Mary5
添加到当前数据库的 Production
数据库角色中。
EXEC sp_addrolemember 'Production', 'Mary5';
示例:Analytics Platform System (PDW)
°C 添加 Windows 登录名
以下示例将登录LoginMary
名作为用户UserMary
添加到AdventureWorks2022
数据库。 用户 UserMary
随即被添加到 Production
角色中。
注意
由于登录LoginMary
名称为数据库中的数据库用户UserMary
AdventureWorks2022
,因此必须指定用户名UserMary
。 如果没有 Mary5
登录名存在,语句将失败。 登录名和用户通常具有相同的名称。 此示例使用不同的名称来区分影响登录名与用户的操作。
-- Uses AdventureWorks2022
CREATE USER UserMary FOR LOGIN LoginMary;
GO
EXEC sp_addrolemember 'Production', 'UserMary'
D. 添加数据库用户
以下示例将数据库用户 UserMary
添加到当前数据库的 Production
数据库角色中。
EXEC sp_addrolemember 'Production', 'UserMary'