sp_addrolemember (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

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

重要

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

Transact-SQL 语法约定

语法

sp_addrolemember
    [ @rolename = ] N'rolename'
    , [ @membername = ] N'membername'
[ ; ]

注意

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

参数

[ @rolename = ] N'rolename'

当前数据库中数据库角色的名称。 @rolenamesysname,无默认值。

[ @membername = ] N'membername'

要添加到角色的安全帐户。 @membername为 sysname,没有默认值。 @membername可以是数据库用户、数据库角色、Windows 登录名或 Windows 组。

返回代码值

0(成功)或 1(失败)。

注解

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

角色不能将自身作为成员包含在内。 此类 循环 定义无效,即使一个或多个中间成员身份间接隐含成员身份也是如此。

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

sp_addrolemember仅用于将成员添加到数据库角色。 若要将成员添加到服务器角色,请使用 sp_addsrvrolemember (Transact-SQL)。

权限

将成员添加到灵活数据库角色需要以下权限之一:

  • db_securityadmindb_owner固定数据库角色的成员身份。

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

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

将成员添加到固定数据库角色需要db_owner固定数据库角色的成员身份。

示例

A. 添加 Windows 登录名

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

因为 Contoso\Mary5AdventureWorks2022 数据库中被识别为数据库用户 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名称为数据库中的数据库用户UserMaryAdventureWorks2022,因此必须指定用户名UserMary。 如果没有 Mary5 登录名存在,语句将失败。 登录名和用户通常具有相同的名称。 此示例使用不同的名称来区分影响登录名与用户的操作。

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

D. 添加数据库用户

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

EXEC sp_addrolemember 'Production', 'UserMary'