SQL Server固定服务器角色共有8个,它们定义了服务器级别的权限集合,用于管理整个SQL Server实例,而非某个具体数据库。这八个角色分别是:sysadmin、serveradmin、securityadmin、processadmin、setupadmin、bulkadmin、diskadmin以及public,其中sysadmin权限最高,public是每个登录名默认拥有的基础角色。
SQL固定服务器角色都有哪些:8个角色的逐一拆解
固定服务器角色存在于SQL Server实例级别,意味着它们的权限作用于整个服务器,而非单个数据库,理解每个角色的具体职能,是规划数据库权限体系的第一步,我将按照权限从高到低的顺序依次说明。
sysadmin:拥有服务器的全部控制权
sysadmin角色相当于Windows系统中的Administrator组,该角色的成员可以执行任何操作,包括创建/删除数据库、修改所有配置、停止或启动服务、控制所有登录名,任何其他角色的权限都被sysadmin包含,所以这个角色的成员数量应当被严格控制。
业内专家指出,一个企业生产环境中,sysadmin角色的成员通常只保留给DBA团队的负责人和应急备用账号,如果你发现某个开发者账号拥有sysadmin权限,这可能是不安全的配置。
serveradmin:负责服务器级别的配置管理
serveradmin角色的权限集中在服务器配置和全局设置上,比如修改服务器内存上限、调整最大并发数、关闭或启动SQL Server服务,该角色可以设置服务器范围的选项,但无法直接访问数据库中的数据,也无法管理登录名或权限。
在实际运维中,serveradmin常用于分工场景:当DBA团队较大时,基础运维工程师被赋予serveradmin权限,负责日常的配置变更和服务重启,但不接触数据层。
securityadmin:管理登录名和权限的分配
securityadmin角色负责管理登录名、创建登录、修改密码,以及授予或撤销服务器级别的权限,该角色可以重置密码,这一点在遗忘密码时非常有用,securityadmin还可以管理数据库级别的权限如果它同时被授予了对应数据库的访问权限。
值得注意的是(此表述仅此处使用一次):该角色的权限有一定边界,它能管理其他登录名的权限,但不能控制sysadmin成员,也不能修改自身的权限。
processadmin:管理服务器中运行的进程
processadmin角色用于管理SQL Server实例上正在运行的进程,成员可以查看当前所有会话,并且能够终止(KILL)特定的进程或会话,当某个查询长时间运行导致锁阻塞,或是某个连接占用过多资源时,processadmin可以强制结束该会话。
这个角色常用于支持团队比如一线运维人员,他们可以快速杀掉问题会话,但无法修改任何配置或读取数据。
setupadmin:管理链接服务器和启动存储过程
setupadmin角色可以创建、删除和配置链接服务器,以及管理某些启动时执行的存储过程,链接服务器允许SQL Server查询其他数据库实例(如Oracle、另一台SQL Server)的数据,因此这个角色在构建异构数据集成时比较关键。
如果你所在的环境中有跨服务器的数据同步需求,setupadmin会被授予给负责集成开发的工程师。
bulkadmin:执行大容量插入操作
bulkadmin角色专门用于执行BULK INSERT和OPENROWSET(BULK…)语句,也就是从外部文件(如文本文件、CSV文件)批量导入数据,默认情况下,执行大容量插入需要sysadmin权限,而bulkadmin抹平了这个门槛,让非sysadmin成员也能做数据导入。
diskadmin:管理磁盘文件和备份设备
diskadmin角色用于管理磁盘上的文件,包括数据库文件(.mdf/.ldf)、备份文件和备份设备,该角色可以备份数据库(但无法还原)、创建备份设备、管理文件的增长设置,这样,日常备份操作可以由该角色成员完成,而不必授予高级权限。
public:每一个登录名的默认角色
public角色是一个特殊的固定服务器角色每个SQL Server登录名都自动属于public角色,且不能被移除,它最初没有任何权限,但数据库管理员可以向public授予权限,这样所有登录名都会继承这些权限,这种机制适用于给所有用户放开一个共性权限,但不建议在public上授予过多特权。
SQL Server固定服务器角色与管理操作:如何查看和分配
了解8个角色之后,你需要掌握在真实环境中如何操作它们,以下内容基于SQL Server Management Studio(SSMS)和T-SQL两种方式进行说明,确保你在任何环境下都能执行。
查看每个固定服务器角色中包含的成员
打开SSMS,在对象资源管理器中展开“安全性”文件夹,然后展开“服务器角色”,你会看到8个角色的列表,右键点击任意一个角色(比如sysadmin),选择“属性”,在“成员”页面即可看到当前拥有该角色的所有登录名。
如果你习惯使用命令,还可以通过T-SQL查询实现更精准的查看,示例语句如下:
-- 查看sysadmin角色的所有成员 EXEC sp_helpsrvrolemember 'sysadmin';
上述语句会返回两列结果:ServerRole(角色名)和MemberName(登录名),这是一条非常实用的查询,建议收藏。
将登录名添加到固定服务器角色
同样在SSMS中,展开“安全性” -> “登录名”,右键点击目标登录名选择“属性”,在“服务器角色”页面勾选需要授予的角色即可完成分配。
T-SQL方式的语句更为简洁,常见的分配语句是:
-- 将登录名 [UserA] 添加到 sysadmin 角色 ALTER SERVER ROLE sysadmin ADD MEMBER [UserA];
如果你需要同时管理多个角色,可以使用中文逗号分隔的多个ALTER语句,或者编写一个简单的批量脚本来执行。
固定服务器角色的权限对比明细
下面这张表汇总了上述8个主要角色的权限侧重,你可以将它作为日常权限规划的参考清单。
| 角色名称 | 权限级别 | 核心能力 | 适用典型场景 |
|---|---|---|---|
| sysadmin | 最高 | 所有配置/所有数据/所有登录名 | 数据库管理员总控 |
| serveradmin | 较高 | 服务器配置/服务控制 | 基础运维工程师 |
| securityadmin | 较高 | 管理登录名/权限分配/重置密码 | 账号生命周期管理 |
| processadmin | 中等 | 查看/终止进程 | 一线运维人员杀阻塞会话 |
| setupadmin | 中等 | 管理链接服务器/启动存储过程 | 跨库集成开发 |
| bulkadmin | 中等 | 执行BULK INSERT批量导入 | 数据仓库ETL工程师 |
| diskadmin | 中等 | 管理数据库文件/备份设备/执行备份 | 备份管理员 |
| public | 基础 | 默认无权限,可被授予 | 所有登录名的兜底角色 |
SQL Server 2026新增两个固定服务器角色
在SQL Server 2026版本中,微软新增了两个固定服务器角色,用于更精细的权限控制,由于百度用户经常搜索“SQL Server 2026新角色”,这里单独展开说明,避免你因版本差异产生混淆。
##MS_ServerStateReader##:只读查看服务器状态
该角色是只读权限,成员可以查看服务器状态相关的动态管理视图(DMV)和函数,例如sys.dm_exec_requests、sys.dm_os_performance_counters等,这对于监控工具或需要查看系统状态的团队很实用,免去了授予更高权限的需要。
##MS_ServerStateManager##:只读状态查看并允许修改部分配置
该角色拥有ServerStateReader的全部权限,同时可以修改部分服务器状态配置项,例如更改某些内存选项、开关某些跟踪标志等,它适用于需要查看并轻微干预但不想承担全部管理责任的场景。
如何为业务账号选择固定服务器角色:实战建议
在选择角色时,你需要遵循一个总原则:最小权限原则只授予完成工作所需的最低权限,避免因权限过大导致的安全风险和数据误操作,以下是一些具体场景的推荐方案。
给应用服务账号分配角色
应用服务账号通常只需要连接数据库并执行增删改查,这类账号不需要任何固定服务器角色,你只需要在具体的数据库中为其分配db_datareader和db_datawriter等数据库角色,很多新手在这里容易出错,直接给了sysadmin,隐患很大。
给报表查询账号分配角色
报表账号需要读取多个数据库的数据,但仍然不需要服务器级别的高权限,正确的做法是:在实例层面只保留public角色,在每个目标数据库中为该登录名分配db_datareader角色。
给备份工程师分配角色
对于负责备份的工程师,通常推荐使用diskadmin角色加上对应数据库的备份权限(如backup operator),这样他能执行备份操作和管理备份文件,却无法查询业务数据或修改数据库结构。
普通DBA运维日常管理
普通DBA可以组合使用serveradmin(处理服务配置)、securityadmin(管理登录名)和processadmin(处理阻塞会话),这样既完成了日常运维,又不至于拥有sysadmin那样绝对的权限。
固定服务器角色常见问题解答
使用T-SQL如何查看当前登录名属于哪个固定服务器角色?
你可以执行以下查询来查看当前登录名拥有的所有固定服务器角色:
SELECT SRV.name AS role_name FROM sys.server_role_members RM INNER JOIN sys.server_principals SRV ON RM.role_principal_id = SRV.principal_id WHERE RM.member_principal_id = SUSER_SID();
除了固定服务器角色,SQL Server还有哪些权限层级?
SQL Server的权限体系分为三个层级:固定服务器角色(实例级别)、固定数据库角色(单个数据库级别)和用户自定义角色(数据库级别),此外还有更细粒度的对象权限(如表、存储过程、视图的SELECT/INSERT/UPDATE/DELETE等),数据库角色的数量远多于服务器角色,且可根据业务逻辑灵活自定义。
固定数据库角色的权限范围是否会覆盖固定服务器角色?
两者是独立的权限体系,不互相覆盖,固定服务器角色管理整个实例的行政管理能力,固定数据库角色管理具体数据库中的数据访问和操作能力,一个登录名可以同时拥有这两类角色,一个登录名的实际权限等于两者权限的并集,一个登录名同时属于serveradmin(服务器角色)和db_owner(数据库角色),他既拥有服务器配置权限,也能够管理该数据库的所有结构。
便是SQL Server固定服务器角色的全貌,核心要点在于:牢记8个角色的名称和定位,为不同人员分配最小必要权限,并养成定期审查角色成员的习惯,这样才能构建一个安全、可管理的SQL Server权限体系。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/713825.html





