为了轻松管理数据库中的权限,SQL Server 提供了多个角色,这些 角色 是将其他主体分组的安全主体。 这些元素就像 Microsoft Windows 操作系统中的组。 数据库级角色在其权限范围内是数据库范围的。
SQL Server 中有两种类型的数据库级角色:在数据库中预定义的 固定数据库角色 和可以创建的 灵活数据库角色 。
固定数据库角色在数据库级别定义,并存在于每个数据库中。 db_owner数据库角色的成员可以管理固定数据库角色成员身份。 msdb 数据库中还有一些特殊用途固定数据库角色。
可以向数据库级角色中添加任何数据库帐户和其他 SQL Server 角色。 固定数据库角色的每个成员都可以把其他登录名添加到同一角色中。
重要
不要将灵活数据库角色添加为固定角色的成员。 这可能导致意外的特权升级。
下表显示了固定数据库级角色及其功能。 这些角色存在于所有数据库中。
数据库级角色名称 | DESCRIPTION |
---|---|
db_owner | db_owner固定数据库角色的成员可以对数据库执行所有配置和维护活动,还可以删除数据库。 |
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_denydatawriter | db_denydatawriter固定数据库角色的成员无法添加、修改或删除数据库中用户表中的任何数据。 |
db_denydatareader | db_denydatareader固定数据库角色的成员无法读取数据库中用户表中的任何数据。 |
msdb 角色
msdb 数据库包含下表中显示的特殊用途角色。
msdb 角色名称 | DESCRIPTION |
---|---|
db_ssisadmin db_ssisoperator db_ssisltduser |
这些数据库角色的成员可以管理和使用 SSIS。 从早期版本升级的 SQL Server 实例可能包含使用数据转换服务(DTS)而不是 SSIS 命名的角色的较旧版本。 有关详细信息,请参阅 Integration Services Roles (SSIS Service)。 |
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 角色。
使用 Database-Level 角色
下表介绍了用于处理数据库级角色的命令、视图和函数。
功能 / 特点 | 类型 | DESCRIPTION |
---|---|---|
sp_helpdbfixedrole(Transact-SQL) | 元数据 | 返回固定数据库角色的列表。 |
sp_dbfixedrolepermission(Transact-SQL) | 元数据 | 显示固定数据库角色的权限。 |
sp_helprole(Transact-SQL) | 元数据 | 返回有关当前数据库中的角色的信息。 |
sp_helprolemember(Transact-SQL) | 元数据 | 返回有关当前数据库中角色成员的信息。 |
sys.database_role_members(Transact-SQL) | 元数据 | 为每个数据库角色的每个成员返回一行。 |
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 组添加到当前数据库中的数据库角色。 |
sp_droprolemember(Transact-SQL) | 指令 | 从当前数据库中的 SQL Server 角色中删除安全帐户。 |
公共数据库角色
每个数据库用户都属于 公共 数据库角色。 如果用户尚未授予或拒绝对安全对象的特定权限,则用户将 继承对该对象 公开的权限。