适用于:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
分析平台系统(PDW)
Microsoft Fabric中的SQL数据库
为便于管理数据库中的权限,SQL Server 提供了若干角色,这些角色是用于对其他主体进行分组的安全主体。 它们类似于 Windows 操作系统中的“组”。 数据库级角色的权限作用域为数据库范围。
若要向数据库角色添加和删除成员,请使用 ADD MEMBER ALTER ROLE DROP MEMBER 语句的 和 选项。 Analytics Platform System (PDW) 和 Azure Synapse Analytics 不支持使用 ALTER ROLE. 改为使用较早版本的 sp_addrolemember 和 sp_droprolemember 过程。
存在两种类型的数据库级角色:数据库中预定义的“固定数据库角色”和可以创建的“用户定义的数据库角色”。
固定数据库角色是在数据库级别定义的,并且存在于每个数据库中。
db_owner 数据库角色的成员可以管理固定数据库角色成员身份。
msdb 数据库中还有一些特殊用途的数据库角色。
可以向数据库级角色中添加任何数据库帐户和其他 SQL Server 角色。
Tip
请不要将用户定义的数据库角色添加为固定角色的成员。 这会导致意外的权限升级。
可以使用 GRANT、DENY 和 REVOKE 语句自定义用户定义数据库角色的权限。 有关详细信息,请参阅 权限(数据库引擎)。
有关所有权限的列表,请参阅 数据库引擎权限 招贴。 不能向数据库角色授予服务器级别权限。 不能向数据库角色添加登录名和其他服务器级别主体(如服务器角色)。 对于 SQL Server 中的服务器级别安全性,请改为使用服务器角色。 不能通过 Azure SQL 数据库 和 Azure Synapse Analytics 中的角色授予服务器级别权限。
固定数据库角色
下表显示固定数据库角色及其能够执行的操作。 所有数据库中都有这些角色。 无法更改分配给固定数据库角色的权限,“公共”数据库角色除外。
| 固定数据库角色名称 | Description |
|---|---|
| db_owner | db_owner 固定数据库角色的成员可以执行数据库的所有配置和维护活动,还可以 SQL Server 中的数据库。DROP (在 SQL 数据库 和 Synapse Analytics 中,某些维护活动需要服务器级别权限,并且不能由 db_owners 执行。) |
| db_securityadmin | db_securityadmin 固定数据库角色的成员可以仅修改自定义角色的角色成员资格和管理权限。 此角色的成员可能会提升其权限,应监视其操作。 |
| db_accessadmin | db_accessadmin 固定数据库角色的成员可以为 Windows 登录名、Windows 组和 SQL Server 登录名添加或删除数据库访问权限。 |
| db_backupoperator | db_backupoperator 固定数据库角色的成员可以备份数据库。 |
| db_ddladmin | db_ddladmin 固定数据库角色的成员可以在数据库中运行任何数据定义语言 (DDL) 命令。 此角色的成员可以通过操作可能以高特权执行的代码来提升其特权,其操作应被监视。 |
| db_datawriter | db_datawriter 固定数据库角色的成员可以在所有用户表中添加、删除或更改数据。 在大多数用例下,此角色与 db_datareader 成员身份一起使用,以允许读取要修改的数据。 |
| db_datareader | db_datareader 固定数据库角色的成员可以从所有用户表和视图中读取所有数据。 用户对象可能存在于除 sys 和 INFORMATION_SCHEMA 以外的任何架构中。 |
| db_denydatawriter | db_denydatawriter 固定数据库角色的成员不能添加、修改或删除数据库内用户表中的任何数据。 |
| db_denydatareader | db_denydatareader 固定数据库角色的成员不能读取数据库内用户表和视图中的任何数据。 此角色的成员也不能读取有关数据库及其对象的元数据,例如查看系统视图。 |
无法更改分配给固定数据库角色的权限。 所有角色(包括 public 角色)都具有 CONNECT 权限。 下图显示分配给固定数据库角色的权限:
| 角色名称 | Permissions |
|---|---|
| db_owner | CONTROL DATABASE:在数据库中具有所有权限。 |
| db_securityadmin | 修改任意应用角色 创建架构 修改任意角色 视图定义 |
| db_accessadmin | 更改任何用户 创建架构 创建用户 |
| db_backupoperator | 备份数据库 备份日志 (BACKUP LOG) CHECKPOINT |
| db_ddladmin | 更改任何程序集 更改任何非对称密钥 修改任何证书 更改任何合同 ALTER ANY DATABASE DDL TRIGGER 更改任何数据库事件通知 更改任何数据空间 更改任何外部库 更改任何全文目录 更改任何消息类型 更改任意远程服务绑定 修改任何路由 更改任何架构 更改任何服务 更改任意对称密钥 CHECKPOINT 创建聚合 CREATE ASSEMBLY (创建程序集) 创建非对称密钥 创建证书 创建合同 创建数据库 DDL 事件通知 创建默认值 创建外部库 创建全文目录 创建函数 创建消息类型 CREATE PROCEDURE 创建队列 创建远程服务绑定 CREATE ROUTE 创建规则 创建架构 创建服务 创建对称密钥 CREATE SYNONYM CREATE TABLE 创建类型 创建视图 创建 XML 架构集合 引用 适用于: SQL Server 2019 及更高版本 更改任何外部语言 CREATE EXTERNAL LANGUAGE 适用于: SQL Server 2022 及更高版本 修改任何外部数据源 更改任何外部文件格式 任何外部作业的ALTER操作 修改任何外部流 ALTER LEDGER 启用账本 |
| db_datareader | GRANT SELECT ON DATABASE::<database-name> |
| db_denydatareader | DENY SELECT ON DATABASE::<database-name> |
| db_datawriter | GRANT INSERT ON DATABASE::<database-name>GRANT UPDATE ON DATABASE:: <database-name>GRANT DELETE ON DATABASE :: <database-name> |
| db_denydatawriter | 拒绝在数据库上插入:<database-name>数据库上拒绝更新:: <database-name>DENY DELETE ON DATABASE:: <database-name> |
| public | 公共数据库角色中没有固有的数据库级权限。 但是,默认情况下存在某些数据库权限。 具体而言,查看任意列加密密钥定义、查看任何列主密钥定义和对多个单个系统表的 SELECT 权限。 可以撤销这些权限。 |
Azure SQL 数据库 和 Azure Synapse 的特殊角色
这些数据库角色仅存在于虚拟 master 数据库中。 他们的权限仅限于在 master 中执行的操作。 只能向这些角色添加 master 中的数据库用户。 无法向这些角色添加登录名,但可以基于登录名创建用户,然后向角色添加用户。 也可以向这些角色添加 master 中包含的数据库用户。 不过,如果向 中的 dbmanager 角色添加包含的数据库用户,这些用户无法用于新建数据库。master
| 角色名称 | Description |
|---|---|
| dbmanager | 可以创建和删除数据库。 创建数据库的 dbmanager 角色的成员成为相应数据库的所有者,这样可便于用户以 dbo 用户身份连接到相应数据库。 Dbo 用户具有数据库中的所有数据库权限。 dbmanager 角色的成员不一定具有访问非他们所有的数据库的权限。 |
| db_exporter | db_exporter 固定数据库角色的成员可以执行所有数据导出活动。 通过此角色授予的权限是 CREATE TABLE、ALTER ANY SCHEMA、ALTER ANY EXTERNAL DATA SOURCE、ALTER ANY EXTERNAL FILE FORMAT。适用于:Azure Synapse Analytics 专用 SQL 池(以前称为 SQL DW) |
| loginmanager | 可以创建和删除虚拟 master 数据库中的登录名。 |
Note
服务器级别主体和 Microsoft Entra 管理员(如果已配置)具有 SQL 数据库和 Azure Synapse Analytics 中的所有权限,且无需成为任何角色的成员。 有关详细信息,请参阅向数据库授予对 SQL 数据库、SQL 托管实例和 Azure Synapse Analytics 的访问权限。
部分数据库角色不适用于 Azure SQL 或 Azure Synapse:
db_backupoperator 不适用于 Azure SQL 数据库(非 Azure SQL 托管实例)和 Azure Synapse Analytics 无服务器池,因为 T-SQL 备份和还原命令不可用。
db_datawriter 和 db_denydatawriter 不适用于 Azure Synapse Analytics 无服务器,因为它只读取外部数据。
msdb 数据库中的角色
msdb 数据库包含下表显示的特殊用途的角色。
msdb 角色名称 |
Description |
|---|---|
|
db_ssisadmin db_ssisoperator db_ssisltduser |
这些数据库角色的成员可以管理和使用 SSIS。 从早期版本升级的 SQL Server 实例可能包含使用 Data Transformation Services (DTS)(而不是 SSIS)命名的旧版本角色。 有关详细信息,请参阅 Integration Services 角色(SSIS 服务)。 |
|
dc_admin dc_operator dc_proxy |
这些数据库角色的成员可以管理和使用数据收集器。 有关详细信息,请参阅数据收集。 |
| PolicyAdministratorRole | db_ PolicyAdministratorRole 数据库角色的成员可以对基于策略的管理策略和条件执行所有配置和维护活动。 有关详细信息,请参阅 使用基于策略的管理来管理服务器。 |
|
ServerGroupAdministratorRole ServerGroupReaderRole |
这些数据库角色的成员可以管理和使用注册的服务器组。 |
| dbm_monitor | 在数据库镜像监视器中注册第一个数据库时在 msdb 数据库中创建。 在系统管理员为 dbm_monitor 角色分配用户之前,该角色没有任何成员。 |
db_ssisadmin 角色和 dc_admin 角色的成员可以将其特权提升为 sysadmin。 因为这些角色可以修改 Integration Services 包,而 Integration Services 使用 SQL Server 代理的 sysadmin 安全上下文可以执行 SQL Server 包,所以可以实现特权提升。 若要在运行维护计划、数据收集组和其他 Integration Services 包时防止此权限提升,请将运行包的 SQL Server 代理作业配置为使用具有有限权限的代理帐户,或只将 sysadmin 成员添加到 db_ssisadmin 和 dc_admin 角色。
使用数据库级角色
下表说明了用于数据库级角色的命令、视图和函数。
| Feature | 类型 | Description |
|---|---|---|
| sp_helpdbfixedrole | Metadata | 返回固定数据库角色的列表。 |
| sp_dbfixedrolepermission | Metadata | 显示固定数据库角色的权限。 |
| sp_helprole | Metadata | 返回当前数据库中有关角色的信息。 |
| sp_helprolemember | Metadata | 返回有关当前数据库中某个角色的成员的信息。 |
| sys.database_role_members | Metadata | 为每个数据库角色的每个成员返回一行。 |
| IS_MEMBER | Metadata | 指示当前用户是否为指定 Microsoft Windows 组、Microsoft Entra 组或 Microsoft SQL Server 数据库角色的成员。 |
| 创建角色 | Command | 在当前数据库中创建新的数据库角色。 |
| 更改角色 | Command | 更改数据库角色的名称或成员身份。 |
| DROP ROLE | Command | 从数据库中删除角色。 |
| sp_addrole | Command | 在当前数据库中创建新的数据库角色。 |
| sp_droprole | Command | 从当前数据库中删除数据库角色。 |
| sp_addrolemember | Command | 为当前数据库中的数据库角色添加数据库用户、数据库角色、Windows 登录名或 Windows 组。 Analytics Platform System (PDW) 和 Azure Synapse 以外的所有平台都应改用 ALTER ROLE。 |
| sp_droprolemember | Command | 从当前数据库的 SQL Server 角色中删除安全帐户。 Analytics Platform System (PDW) 和 Azure Synapse 以外的所有平台都应改用 ALTER ROLE。 |
| GRANT | Permissions | 向角色添加权限。 |
| DENY | Permissions | 拒绝向角色授予权限。 |
| REVOKE | Permissions | 撤消以前授予或拒绝的权限。 |
public 数据库角色
每个数据库用户都属于 public 数据库角色。 如果未向某个用户授予或拒绝对安全对象的特定权限时,该用户将继承授予该对象的 public 角色的权限。 无法将数据库用户从 public 角色删除。
Examples
本节中的示例展示了如何使用数据库级角色。
A. 将用户添加到数据库级角色
下面的示例将用户“Ben”添加到固定数据库级角色 db_datareader。
ALTER ROLE db_datareader ADD MEMBER Ben;
GO
B. 列出作为数据库级别角色成员的所有数据库主体
下面的语句将返回任何数据库角色的所有成员。
SELECT roles.principal_id AS RolePrincipalID,
roles.name AS RolePrincipalName,
database_role_members.member_principal_id AS MemberPrincipalID,
members.name AS MemberPrincipalName
FROM sys.database_role_members AS database_role_members
INNER JOIN sys.database_principals AS roles
ON database_role_members.role_principal_id = roles.principal_id
INNER JOIN sys.database_principals AS members
ON database_role_members.member_principal_id = members.principal_id;
GO