服务器级别和数据库级别的角色

本文详细介绍了 SQL Server 中的服务器级与数据库级角色,包括固定角色与用户定义角色的功能与权限。重点阐述了如何通过这些角色进行有效的权限管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务器级别角色

为帮助您管理服务器上的权限,SQL Server 提供了若干角色。这些角色是用于对其他主体进行分组的安全主体。 服务器级角色的权限作用域为服务器范围。 ("角色"类似于 Windows 操作系统中的"组"。)

提供固定服务器角色是为了方便使用和向后兼容。 应尽可能分配更具体的权限。

SQL Server 提供了九种固定服务器角色。 无法更改授予固定服务器角色的权限。 从 SQL Server 2012 开始,您可以创建用户定义的服务器角色,并将服务器级权限添加到用户定义的服务器角色。

您可以将服务器级主体(SQL Server 登录名、Windows 帐户和 Windows 组)添加到服务器级角色。 固定服务器角色的每个成员都可以将其他登录名添加到该同一角色。 用户定义的服务器角色的成员则无法将其他服务器主体添加到角色。

服务器级的固定角色

下表显示了服务器级的固定角色及其权限。

服务器级的固定角色

说明

sysadmin

sysadmin 固定服务器角色的成员可以在服务器中执行任何活动。

serveradmin

serveradmin 固定服务器角色的成员可以更改服务器范围内的配置选项并关闭服务器。

securityadmin

securityadmin 固定服务器角色的成员管理登录名及其属性。 他们可以 GRANT、DENY 和 REVOKE 服务器级权限。 他们还可以 GRANT、DENY 和 REVOKE 数据库级权限(如果他们具有数据库的访问权限)。 此外,他们还可以重置 SQL Server 登录名的密码。

 安全说明

能够授予数据库引擎的访问权限和配置用户权限的能力使得安全管理员可以分配大多数服务器权限。 securityadmin 角色应视为与 sysadmin 角色等效。

processadmin

processadmin 固定服务器角色的成员可以终止在 SQL Server 实例中运行的进程。

setupadmin

setupadmin 固定服务器角色的成员可以添加和删除链接服务器。

bulkadmin

bulkadmin 固定服务器角色的成员可以运行 BULK INSERT 语句。

diskadmin

diskadmin 固定服务器角色用于管理磁盘文件。

dbcreator

dbcreator 固定服务器角色的成员可以创建、更改、删除和还原任何数据库。

public

每个 SQL Server 登录名均属于 public 服务器角色。 如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,该用户将继承授予该对象的 public 角色的权限。当您希望该对象对所有用户可用时,只需对任何对象分配 public 权限即可。 您无法更改 public 中的成员关系。

 注意

public 的实现方式与其他角色不同。 但是,可以从 public 授予、拒绝或撤销权限。

服务器级权限

只能向用户定义的服务器角色中添加服务器级权限。 若要列出服务器级别的权限,请执行下面的语句。服务器级别权限如下:

Transact-SQL

SELECT * FROM sys.fn_builtin_permissions('SERVER') ORDER BY permission_name;

有关权限的详细信息,请参阅权限(数据库引擎)和 sys.fn_builtin_permissions (Transact-SQL)

使用服务器级角色

下表介绍了可以用于服务器级角色的命令、视图和功能。

功能

类型

说明

sp_helpsrvrole (Transact-SQL)

元数据

返回服务器级角色的列表。

sp_helpsrvrolemember (Transact-SQL)

元数据

返回有关服务器级角色成员的信息。

sp_srvrolepermission (Transact-SQL)

元数据

显示服务器级角色的权限。

IS_SRVROLEMEMBER (Transact-SQL)

元数据

指示 SQL Server 登录名是否为指定服务器级角色的成员。

sys.server_role_members (Transact-SQL)

元数据

为每个服务器级角色的每个成员返回一行。

sp_addsrvrolemember (Transact-SQL)

命令

将登录名添加为某个服务器级角色的成员。 不推荐使用。 应改用 ALTER SERVER ROLE

sp_dropsrvrolemember (Transact-SQL)

命令

从服务器级角色中删除 SQL Server 登录名或 Windows 用户或组。 不推荐使用。 应改用 ALTER SERVER ROLE

CREATE SERVER ROLE (Transact-SQL)

命令

创建用户定义的服务器角色。

ALTER SERVER ROLE (Transact-SQL)

命令

更改服务器角色的成员关系或更改用户定义的服务器角色的名称。

DROP SERVER ROLE (Transact-SQL)

命令

删除用户定义的服务器角色。

IS_SRVROLEMEMBER (Transact-SQL)

功能

确定服务器角色的成员关系。

 

数据库级别的角色

为便于管理数据库中的权限,SQL Server 提供了若干"角色",这些角色是用于对其他主体进行分组的安全主体。 它们类似于 Microsoft Windows 操作系统中的。 数据库级角色的权限作用域为数据库范围。

SQL Server 中有两种类型的数据库级角色:数据库中预定义的"固定数据库角色"和您可以创建的"灵活数据库角色"。

固定数据库角色是在数据库级别定义的,并且存在于每个数据库中。 db_owner 和 db_securityadmin 数据库角色的成员可以管理固定数据库角色成员身份。 但是,只有 db_owner 数据库角色的成员能够向 db_owner 固定数据库角色中添加成员。 msdb 数据库中还有一些特殊用途的固定数据库角色。

您可以向数据库级角色中添加任何数据库帐户和其他 SQL Server 角色。 固定数据库角色的每个成员都可向同一个角色添加其他登录名。

 重要提示

请不要将灵活数据库角色添加为固定角色的成员。 这会导致意外的权限升级。

下表显示了固定数据库级角色及其能够执行的操作。 所有数据库中都有这些角色。

数据库级别的角色名称

说明

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 角色名称

说明

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 包,而 SQL Server 使用 SQL Server 代理的 sysadmin 安全上下文可以执行 Integration Services 包,因此可以实现特权提升。 若要防止在运行维护计划、数据收集组和其他 Integration Services 包时提升特权,请将运行包的 SQL Server 代理作业配置为具有有限特权的代理帐户,或仅将 sysadmin 成员添加到 db_ssisadmin 和 dc_admin 角色。

使用数据库级角色

下表说明了用于数据库级角色的命令、视图和函数。

功能

类型

说明

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 角色中删除安全帐户。

public 数据库角色

每个数据库用户都属于 public 数据库角色。如果未向某个用户授予或拒绝对安全对象的特定权限时,该用户将继承授予该对象的 public 角色的权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值