适用于:
SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Analytics Platform System (PDW)
为了轻松管理数据库中的权限,SQL Server 提供了多个角色,这些角色是将其他主体分组的安全主体。 它们类似于
Microsoft Windows 操作系统中的组
。 数据库级角色在其权限范围内是数据库范围的。
若要向数据库角色添加和删除用户,请使用
ADD MEMBER
ALTER ROLE
语句的
和
DROP MEMBER
选项。 分析平台系统 (PDW) 和 Azure Synapse Analytics 不支持使用
ALTER ROLE
。 请改用较旧的
sp_addrolemember
和
sp_droprolemember
过程。
有两种类型的数据库级角色:
在数据库中预定义的固定数据库角色
和
可以创建的用户定义数据库角色
。
固定数据库角色在数据库级别定义,并存在于每个数据库中。
db_owner
数据库角色的成员可以管理固定数据库角色成员身份。 msdb 数据库中也有一些特殊用途的数据库角色。
可以将任何数据库帐户和其他 SQL Server 角色添加到数据库级角色中。
不要将用户定义的数据库角色添加为固定角色的成员。 这可以启用意外的特权升级。
可以使用
GRANT
、
DENY
和
REVOKE
语句自定义用户定义的数据库角色的权限。 有关详细信息,请参阅
权限(数据库引擎)。
有关所有权限的列表,请参阅
数据库引擎权限
海报。 无法向数据库角色授予服务器级权限。 无法将登录名和其他服务器级主体(如服务器角色)添加到数据库角色。 对于 SQL Server 中的服务器级安全性,请改用
服务器角色
。 无法通过 Azure SQL 数据库和 Azure Synapse Analytics 中的角色授予服务器级权限。
固定数据库角色
下表显示了固定数据库角色及其功能。 这些角色存在于所有数据库中。 除公共
数据库角色外
,无法更改分配给固定数据库角色的权限。
固定数据库角色名称
db_owner
db_owner
固定数据库角色的成员可以对数据库执行所有配置和维护活动,还可以
drop
在 SQL Server 中执行数据库。 (在 SQL 数据库和 Azure Synapse 中,某些维护活动需要服务器级权限,不能由
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
固定数据库角色的成员无法从数据库中的用户表和视图读取任何数据。
无法更改分配给固定数据库角色的权限。 下图显示了分配给固定数据库角色的权限:
SQL 数据库和 Azure Synapse 的特殊角色
这些数据库角色仅存在于虚拟
master
数据库中。 其权限仅限于在其中
master
执行的操作。 只能向这些角色添加数据库用户
master
。 无法将登录名添加到这些角色,但可以根据登录名创建用户,然后将这些用户添加到角色。 还可以将这些角色中包含的数据库用户
master
添加到这些角色。 但是,添加到 dbmanager
角色中的
master
包含的数据库用户
不能用于创建新数据库。
dbmanager
可以创建和删除数据库。 创建数据库的 dbmanager 角色的成员将成为该数据库的所有者,该所有者允许用户以 dbo 用户身份连接到该数据库。 dbo 用户拥有数据库中的所有数据库权限。 dbmanager 角色的成员不一定有权访问他们不拥有的数据库。
db_exporter
仅适用于 Azure Synapse Analytics 专用 SQL 池(以前为 SQL DW)。
db_exporter
固定数据库角色的成员可以执行所有数据导出活动。 通过此角色授予的权限包括 CREATE TABLE、ALTER ANY SCHEMA、ALTER ANY EXTERNAL DATA SOURCE、ALTER ANY EXTERNAL FILE FORMAT。
loginmanager
可以在虚拟
master
数据库中创建和删除登录名。
服务器级主体和 Azure Active Directory 管理员(如果已配置)在 SQL 数据库和 Azure Synapse Analytics 中具有所有权限,而无需成为任何角色的成员。 有关详细信息,请参阅
SQL 数据库身份验证和授权:授予访问权限
。
某些数据库角色不适用于 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 角色名称
db_ssisadmin
db_ssisoperator
db_ssisltduser
这些数据库角色的成员可以管理和使用 SSIS。 从早期版本升级的 SQL Server 实例可能包含使用数据转换服务(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
角色。
使用数据库级角色
下表介绍了用于处理数据库级角色的命令、视图和函数。
IS_MEMBER (Transact-SQL)
指示当前用户是指定 Microsoft Windows 组的成员还是 Microsoft SQL Server 数据库角色的成员。
CREATE ROLE (Transact-SQL)
在当前数据库中创建新的数据库角色。
ALTER ROLE (Transact-SQL)
更改数据库角色的名称或成员身份。
DROP ROLE (Transact-SQL)
从数据库中删除角色。
sp_addrole (Transact-SQL)
在当前数据库中创建新的数据库角色。
sp_droprole (Transact-SQL)
从当前数据库中删除数据库角色。
sp_addrolemember (Transact-SQL)
将数据库用户、数据库角色、Windows 登录名或 Windows 组添加到当前数据库中的数据库角色。 分析平台系统(PDW)和 Azure Synapse 以外的所有平台都应改用
ALTER ROLE
。
sp_droprolemember (Transact-SQL)
从当前数据库中的 SQL Server 角色中删除安全帐户。 分析平台系统(PDW)和 Azure Synapse 以外的所有平台都应改用
ALTER ROLE
。
GRANT
向角色添加权限。
拒绝对角色的权限。
REVOKE
删除以前授予或拒绝的权限。
公共数据库角色
每个数据库用户都属于
公共
数据库角色。 如果用户尚未授予或拒绝对安全对象的特定权限,则用户将继承对该
对象公开的权限。 无法从
公共
角色中删除数据库用户。
本节中的示例演示如何使用数据库级角色。
.A 将用户添加到数据库级角色
以下示例将用户“Ben”添加到固定数据库级角色
db_datareader
。
ALTER ROLE db_datareader
ADD MEMBER Ben;
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
JOIN sys.database_principals AS roles
ON database_role_members.role_principal_id = roles.principal_id
JOIN sys.database_principals AS members
ON database_role_members.member_principal_id = members.principal_id;
安全性目录视图 (Transact-SQL)
安全存储过程 (Transact-SQL)
安全函数 (Transact-SQL)
保护 SQL Server
sp_helprotect (Transact-SQL)
Azure SQL 数据库中的服务器角色