萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

SQL Server 別名用戶安全隱患:隱藏的 dbo 權限與稽核查詢

什麼是別名用戶?

早期 SQL Server 允許將一個登入「別名」為資料庫內的現有用戶(通常是 dbo),透過 sp_addalias 實現。**SQL Server 2005 仍保留相容,2008 已移除。**

隱患:SSMS 不顯示、標準查詢查不到

  • 物件總管「使用者」節點**不會列出**別名用戶。
  • SELECT * FROM sys.database_principals 也看不到。
  • 僅能在 sys.sysusers 系統表看到 isaliased = 1、altuid 指向目標用戶。

實測重現

-- 建立登入
CREATE LOGIN AliasUser1 WITH PASSWORD='test';
CREATE LOGIN DBUser1 WITH PASSWORD='test';

-- 別名給 dbo
EXEC sp_addalias 'AliasUser1', 'dbo';

-- 正常用戶加入 db_owner 角色
CREATE USER DBUser1 FOR LOGIN DBUser1;
ALTER ROLE db_owner ADD MEMBER DBUser1;

使用 AliasUser1 登入 SSMS,**使用者節點為空**,但實際擁有完整 dbo 權限(建表、改結構、刪資料)。

稽核查詢:找出所有別名用戶

-- 方法 1:sys.sysusers(相容性視圖)
SELECT name, hasdbaccess, isaliased, altuid
FROM sys.sysusers
WHERE isaliased = 1;

-- 方法 2:sp_helpuser(顯示兩個結果集,第二個為別名)
EXEC sp_helpuser;

移除別名

-- 不能用 sp_dropuser
EXEC sp_dropalias 'AliasUser1';

安全建議

  1. **立即稽核**所有資料庫:執行上述查詢,確認無未授權別名。
  2. **替換方案**:使用標準角色成員資格(ALTER ROLE db_owner ADD MEMBER ...)或授予具體權限(GRANT ...)。
  3. **升級計畫**:SQL Server 2008+ 已移除此功能,遷移時必須重寫權限模型。
copyright © 萬盛學電腦網 all rights reserved