非SA权限账号如何查看SQL Server sys.sysprocesses的所有行?
非SA用户查看sys.sysprocesses所有行的解决方案
嘿,这个需求我之前帮团队处理过,刚好可以给你几个可行的方案:
方案1:授予VIEW SERVER STATE权限(最直接高效)
这是SQL Server官方推荐的方式,默认情况下只有SA或拥有VIEW SERVER STATE权限的用户才能查看sys.sysprocesses的全部内容(包括其他用户的进程)。
让拥有SA权限的管理员执行以下命令,给你的登录账号授权:
GRANT VIEW SERVER STATE TO [你的登录名];
这个权限仅允许用户查看服务器级的状态信息,不会赋予SA那样的高权限,完全匹配你“查看其他用户连接实例”的需求。
方案2:创建自定义视图并授权(权限更精细)
如果觉得VIEW SERVER STATE的权限范围略大,可以让SA创建一个仅包含你需要字段的自定义视图,再单独给你授权查看该视图的权限:
- SA登录目标实例,在任意数据库(比如master库)创建视图:
CREATE VIEW dbo.UserProcesses AS SELECT spid, loginame, hostname, program_name, dbname, status FROM sys.sysprocesses WHERE spid > 50; -- 过滤系统进程,只展示用户发起的进程 - 给你的登录账号授予该视图的查询权限:
GRANT SELECT ON dbo.UserProcesses TO [你的登录名];
这样你只能看到视图中指定的信息,权限范围更窄,安全性更高。
关于内置角色的说明
目前SQL Server没有专门的内置服务器角色能直接让用户查看sys.sysprocesses的所有行。比如processadmin角色主要用于管理进程(如终止进程),并不具备查看所有进程的权限,所以还是上面两个方案更实用。
结合你用dbo账号连接多实例查看用户连接的场景,方案1应该是最高效的,只要让每个实例的SA给你的账号授予VIEW SERVER STATE权限即可。
内容的提问来源于stack exchange,提问作者benjamin moskovits




