首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 別名使用者安全風險與檢測腳本 (已棄用功能)

     編輯:MySQL 資料庫相關知識

SQL Server 2000/2005 支援 sp_addalias 將登入映射為資料庫使用者 (Alias User),賦予 dbo 權限但**不顯示在 SSMS「使用者」節點**,造成權限審計盲區。此功能 **SQL Server 2008 已棄用**,2012 移除。本文提供檢測腳本、風險演示與遷移建議。

風險演示

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

-- 建立別名使用者 (舊語法)
EXEC sp_addalias 'AliasUser1', 'dbo';  -- 映射為 dbo

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

SSMS 視圖盲區:AliasUser1 **不出現在**「資料庫」→「安全性」→「使用者」清單,但實際擁有完整 dbo 權限。

檢測腳本:發現所有別名使用者

-- 方法一:查詢系統表 (SQL 2000/2005/2008)
SELECT name AS AliasUser, hasdbaccess, isaliased
FROM sys.sysusers
WHERE isaliased = 1;

-- 方法二:sp_helpuser (顯示別名專區)
EXEC sp_helpuser;
-- 結果集 2 會列出 "AliasUser1" 及其映射目標 "dbo"

權限審計完整查詢 (含別名、角色成員、直接權限)

-- 1. 別名使用者
SELECT 'Alias' AS Type, su.name AS Principal, 'dbo' AS MappedTo
FROM sys.sysusers su WHERE su.isaliased = 1

UNION ALL

-- 2. 角色成員 (含 db_owner)
SELECT 'RoleMember', dp.name, r.name
FROM sys.database_role_members drm
JOIN sys.database_principals dp ON dp.principal_id = drm.member_principal_id
JOIN sys.database_principals r ON r.principal_id = drm.role_principal_id
WHERE r.name = 'db_owner'

UNION ALL

-- 3. 直接擁有 dbo schema 擁有權的使用者
SELECT 'SchemaOwner', dp.name, 'dbo'
FROM sys.database_principals dp
JOIN sys.schemas s ON s.principal_id = dp.principal_id
WHERE s.name = 'dbo' AND dp.type IN ('U','S','G');

移除別名使用者

-- 僅能用 sp_dropalias,不可用 sp_dropuser
EXEC sp_dropalias 'AliasUser1';

遷移建議 (SQL 2008+ 環境)

  1. 清查現有別名:執行上述檢測腳本。
  2. 為每個別名登入建立對應資料庫使用者:CREATE USER AliasUser1 FOR LOGIN AliasUser1;
  3. 加入 db_owner 角色:ALTER ROLE db_owner ADD MEMBER AliasUser1;
  4. 移除別名:EXEC sp_dropalias 'AliasUser1';
  5. 驗證應用連線正常 (連線字串無需修改,仍用原登入)。

最佳實踐

  • 新環境**嚴禁使用別名**,統一採用「登入 → 資料庫使用者 → 角色」模型。
  • 定期 (月/季) 執行審計腳本,確保無殘留別名、無過度授權帳號。
  • 文件化權限矩陣:登入、使用者、角色、Schema 擁有權、物件級權限對應表。
  • 升級專案必須包含「別名清理」驗收項目。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved