SQL Server固定服务器角色共9个,其中最核心的是sysadmin(系统管理员),拥有实例全部权限,其他8个角色分别负责安全、进程、磁盘、备份等特定领域的管理任务。
sql server固定服务器角色有哪些九个角色一张表看懂
固定服务器角色是SQL Server在实例级别内置的权限集合,无法删除或改名,只能向里面添加登录名,行业共识认为,理解这9个角色是规划数据库权限体系的基础,很多企业的权限失控事故,源头就是对sysadmin和securityadmin的边界认知模糊。
sysadmin:实例级最高权限
sysadmin角色成员可以对当前SQL Server实例执行任何操作,包括创建数据库、修改服务器配置、删除登录名、查看所有数据,DBA团队核心成员通常加入该角色。该角色绕过了所有权限检查,哪怕某个登录名显式被拒绝访问某张表,只要它属于sysadmin,依然可以读取。
securityadmin:登录名和权限的总管
securityadmin负责管理登录名、创建登录、修改密码、管理服务器级权限,业内专家指出,securityadmin是实际运维中出现频率最高的“半个管理员”,因为它能重置任意登录名的密码,一旦被恶意使用,等同于间接控制整个实例。
serveradmin:服务器配置的调控者
serveradmin角色可以修改服务器范围内的配置选项,如内存上限、最大并发数,也可以关闭服务器实例,它不能读取用户数据,但能通过调整配置让服务不可用,属于“操作型高危角色”。
setupadmin:链接服务器的掌控者
setupadmin可以添加和删除链接服务器,也拥有执行部分T-SQL安装语句的权限。链接服务器本质上是跨实例的数据通道,控制它意味着可以绕过当前实例直接访问远端数据源。
processadmin:进程与连接的终结者
processadmin可以查看并终止实例中正在运行的进程,比如用KILL命令结束某个阻塞其他会话的长事务,这个角色适合留给运维值班人员,用于处理死锁和长时间运行任务。
diskadmin:磁盘文件的调度员
diskadmin可以管理数据库文件、备份设备以及文件组,它可以扩展数据库文件大小、添加辅助文件。注意它不能备份数据库,但能操作磁盘布局。
dbcreator:数据库的创建者
dbcreator可以创建、修改、删除和还原数据库,它无法管理登录名,也无法读取现有数据库内的业务数据,适合交给需要独立搭建测试库的开发组成员。
bulkadmin:大数据量导入的专用通道
bulkadmin专门用于执行BULK INSERT和OPENROWSET(BULK…)语句,实现快速从外部文件导入数据。它不能执行普通INSERT语句,权限范围极窄但导入效率极高。
public:每个登录名的默认身份
public角色是每个登录名自动拥有的,无法移除用户,它默认只拥有少数权限,如查看数据库列表、执行部分系统存储过程,所有用户默认都在public中,通常不需要直接管理。
下表展示核心权限对比:
| 角色名称 | 核心能力 | 能否读业务数据 | 典型使用场景 |
|---|---|---|---|
| sysadmin | 实例一切操作 | 能 | DBA核心成员 |
| securityadmin | 管理登录名和密码 | 否 | 账号管理员 |
| serveradmin | 改服务器配置 | 否 | 服务器调优 |
| setupadmin | 管理链接服务器 | 否 | 跨库同步专员 |
| processadmin | 终止进程 | 否 | 运维值班人员 |
| diskadmin | 管理磁盘文件 | 否 | 存储工程师 |
| dbcreator | 创建/还原数据库 | 否 | 开发环境管理员 |
| bulkadmin | 批量导入数据 | 否 | 数据抽取人员 |
sql server角色分配实操:SSMS与T-SQL两种路径
知道角色清单还不够,需要掌握实际的分配操作,下面两条路径分别对应图形界面和命令行,覆盖绝大多数日常管理需求。
通过SSMS图形化分配角色
打开SQL Server Management Studio,连接到目标实例后,按以下步骤操作:
- 在对象资源管理器中展开“安全性”节点
- 右键点击“服务器角色”,选择“属性”
- 双击目标角色名称,打开成员列表窗口
- 点击“添加”按钮,输入或搜索登录名
- 确认后点击“确定”完成添加
这种方式适合管理少量登录名,直观且不容易出错,对于需要批量操作的场景,推荐使用T-SQL。
通过T-SQL命令分配角色
在查询窗口中执行以下语句,将登录名加入指定角色:
-- 将域用户加入sysadmin角色 ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSOzhangsan]; -- 将SQL登录名加入dbcreator角色 ALTER SERVER ROLE dbcreator ADD MEMBER [sqldev_user]; -- 移除用户角色 ALTER SERVER ROLE sysadmin DROP MEMBER [CONTOSOzhangsan]; -- 查询当前实例所有固定服务器角色的成员 SELECT r.name AS 角色名称, m.name AS 登录名 FROM sys.server_role_members rm JOIN sys.server_principals r ON rm.server_role_id = r.principal_id JOIN sys.server_principals m ON rm.member_principal_id = m.principal_id;
脚本化的最大优势是可审计、可重复执行,相关实践在运维岗位面试中被频繁考察。
固定服务器角色和数据库角色区别(为什么不能混用)
很多新手混淆这两个概念,导致权限配置混乱,固定服务器角色的权限范围是整个实例,而固定数据库角色的权限范围仅限于单个数据库,两者的核心区别如下:
- 作用范围:服务器角色控制实例级操作,数据库角色控制库内对象操作
- 成员类型:服务器角色添加登录名,数据库角色添加数据库用户
- 典型角色:服务器角色如sysadmin、securityadmin;数据库角色如db_owner、db_datareader
- 权限强度:服务器角色可影响所有库,数据库角色即使拥有db_owner也不能管理服务器配置
举个例子,一个用户只在securityadmin中,但没有在某个业务库中映射任何用户,那么它虽然可以创建登录名,却无法打开该库的数据表。两者是叠加关系,不是替代关系想要完整的管理能力,往往需要同时分配服务器角色和数据库角色。
sql server权限分配最佳实践:按最小权限原则设计
权限设计的目标不是功能最大化,而是风险最小化,以下场景基于真实运维经验总结,覆盖了最常见的几种需求。
新入职DBA的初始权限
新DBA入职时,不应立即加入sysadmin,可以先加入以下组合观察两到三周:
- dbcreator + diskadmin:能建库、管文件,但不能碰登录名
- processadmin:可以处理阻塞进程
- 观察学习现有运维流程后再考虑是否补发securityadmin或sysadmin
应用服务账号的权限收敛
许多生产应用使用sa账号连接数据库,这是近年来安全审计中暴露最多的高危行为,推荐改造方案如下:
- 创建专用SQL登录名,并创建对应数据库用户
- 在业务库中授予db_datareader和db_datawriter
- 如果存储过程涉及跨库调用,额外授予视图定义权限而非提升为db_owner
- 定期复盘权限申请表,确认无长期闲置的高权限账号
日常审计固定服务器角色成员
每月执行一次上文提到的成员查询脚本,重点关注以下变化:
- sysadmin成员数量是否增长
- securityadmin中是否有离职人员的账号
- 是否存在名字相似、疑似克隆的高权限账号
这类审计可以通过SQL Server代理作业自动生成报表,配合邮件发送给DBA组长,固定服务器角色是SQL Server权限体系的基石,多数权限攻击路径都围绕着sysadmin和securityadmin展开,理解每个角色的权力边界,并将最小权限原则落地到日常分配中,是保障数据库安全的核心手段。
Q&A:sql server固定服务器角色权限边界常见疑问
sql server sysadmin和securityadmin有什么区别?
sysadmin能操作实例的一切对象,包括读写所有数据库表数据、修改所有配置选项;securityadmin只管理登录名和服务器级权限,不能直接读写业务数据,但securityadmin可以修改任意登录名的密码,包括sysadmin成员的密码,因此在安全等级上两者都被视为高危角色。
查询固定服务器角色成员有哪些常用语句?
核心脚本是查询sys.server_role_members系统视图,它记录角色与成员的映射关系,结合sys.server_principals可以同时显示角色名称和登录名,SQL Server 2012及以上版本无需使用已废弃的sp_helpsrvrolemember存储过程。
固定服务器角色能自定义权限吗?
不能,固定服务器角色的权限集合是系统内置的,用户既不能删除其内置权限,也不能直接向其中添加额外权限。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/730066.html





