警示:別名使用者功能自 SQL Server 2005 起標記棄用,SQL Server 2012 移除。本文僅供舊版環境 (≤ 2008 R2) 稽核清理參考。
sp_addalias 'LoginName', 'TargetUser' 將某登入映射為資料庫內的另一使用者 (通常是 dbo),獲得目標使用者的完整權限。關鍵缺陷:SSMS 物件總管「使用者」節點 不顯示 別名使用者,造成權限監管盲區。
AliasUser1 映射 dbo,擁有完全控制權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; -- 第二個結果集顯示別名

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

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

圖 3:sp_helpuser 第二結果集 — 明確列出別名
-- 唯一正確方式
EXEC sp_dropalias 'AliasUser1';
-- ❌ sp_dropuser 'AliasUser1' 會報錯或無效
| 舊模式 | 現代替代 | 優勢 |
|---|---|---|
| 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]; | 最小權限原則 |
db_owner 角色成員,驗證每個成員業務必要性sys.server_principals 登入對應資料庫使用者一對一關係sp_addalias 呼叫結語:別名使用者是技術債與安全隱患的雙重體現。完成清理並遷移至角色基礎權限模型,是資料庫治理的必修課。