You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server查询sysadmin/securityadmin角色成员遇问题求助

解决SQL查询的两个问题

问题1:显示角色名称

原查询仅查询了服务器主体信息,未关联角色表,因此无法返回角色名称。需通过sys.server_role_members关联角色对应的主体记录,获取角色名称。

问题2:区分大小写导致过滤失效

实例区分大小写时,直接使用name NOT IN (...)会因大小写不匹配导致过滤失败。可通过统一转换为小写(或大写)进行比较,规避大小写敏感问题。

修改后的查询代码

SELECT   
    sp.name AS principal_name,
    role_princ.name AS role,
    sp.type_desc,
    sp.is_disabled
FROM     
    master.sys.server_principals sp
JOIN master.sys.server_role_members srm ON sp.principal_id = srm.member_principal_id
JOIN master.sys.server_principals role_princ ON srm.role_principal_id = role_princ.principal_id
WHERE    
    role_princ.name IN ('sysadmin', 'securityadmin')
    AND LOWER(sp.name) NOT IN ('sa', LOWER('dom\mssql_admins'), LOWER('dom\netbackup_mssql'), LOWER('dom\userX'),
                               LOWER('NT SERVICE\SQLWriter'), LOWER('NT SERVICE\Winmgmt'),
                               LOWER('NT SERVICE\MSSQLSERVER'),
                               LOWER('NT SERVICE\SQLSERVERAGENT'), LOWER('dom\SQL-TASK'))
    AND sp.name NOT LIKE '%$%'
ORDER BY 
    sp.name

代码说明

  • 两次JOIN关联角色表,明确获取用户所属的服务器角色名称
  • 用LOWER()函数统一转换主体名称为小写,解决大小写敏感导致的过滤失效问题
  • 直接通过角色名称过滤目标角色,替代原查询的IS_SRVROLEMEMBER函数,逻辑更直观

内容的提问来源于stack exchange,提问作者Purclot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:27:39