首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 別名使用者 (Alias User) 安全風險與稽核指南

     編輯:關於SqlServer

隱形特權帳號:SQL Server 別名使用者 (Alias User) 的安全盲點與治理

警示:別名使用者功能自 SQL Server 2005 起標記棄用,SQL Server 2012 移除。本文僅供舊版環境 (≤ 2008 R2) 稽核清理參考。

什麼是別名使用者?

sp_addalias 'LoginName', 'TargetUser' 將某登入映射為資料庫內的另一使用者 (通常是 dbo),獲得目標使用者的完整權限。關鍵缺陷:SSMS 物件總管「使用者」節點 不顯示 別名使用者,造成權限監管盲區。

風險情境

  1. 開發人員建立 AliasUser1 映射 dbo,擁有完全控制權
  2. SSMS 顯示正常使用者清單,完全看不見 AliasUser1
  3. 離職/異動時遺漏清理,殘留高權限後門
  4. 稽核查詢 sys.database_principals / sysusers 若未檢查 isaliased 將漏報

偵測腳本:找出所有別名使用者

-- 方法 1: 系統檢視 (SQL 2005+)
SELECT 
    name AS AliasUserName,
    principal_id,
    type_desc,
    default_schema_name,
    sid
FROM sys.database_principals
WHERE type = 'A'  -- A = ALIAS
  AND name <> 'dbo';

-- 方法 2: 相容檢視 (含 SQL 2000)
SELECT 
    name, 
    uid, 
    gid, 
    isaliased, 
    loginname
FROM sys.sysusers
WHERE isaliased = 1;

-- 方法 3: 系統預存程序
EXEC sp_helpuser;  -- 第二個結果集顯示別名

圖解:SSMS 盲區與系統表真相

SSMS 使用者節點未顯示別名

圖 1:SSMS 物件總管使用者節點 — 無別名使用者

sys.sysusers 顯示 isaliased=1

圖 2:sys.sysusers — isaliased=1 確認為別名

sp_helpuser 顯示別名

圖 3:sp_helpuser 第二結果集 — 明確列出別名

移除別名使用者

-- 唯一正確方式
EXEC sp_dropalias 'AliasUser1';
-- ❌ sp_dropuser 'AliasUser1' 會報錯或無效

遷移至現代權限模型 (SQL 2005+)

舊模式現代替代優勢
sp_addalias 'Login', 'dbo'CREATE USER [User] FOR LOGIN [Login]; ALTER ROLE db_owner ADD MEMBER [User];可見、可稽核、支援細緻權限
別名映射其他使用者CREATE USER [User] FOR LOGIN [Login]; GRANT SELECT ON Schema::X TO [User];最小權限原則

稽核檢查清單 (每季執行)

  1. ☐ 執行偵測腳本,確認零別名使用者
  2. ☐ 檢查 db_owner 角色成員,驗證每個成員業務必要性
  3. ☐ 審查 sys.server_principals 登入對應資料庫使用者一對一關係
  4. ☐ 移除棄用腳本/部署包中的 sp_addalias 呼叫

結語:別名使用者是技術債與安全隱患的雙重體現。完成清理並遷移至角色基礎權限模型,是資料庫治理的必修課。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved