早期 SQL Server 允許將一個登入「別名」為資料庫內的現有用戶(通常是 dbo),透過 sp_addalias 實現。**SQL Server 2005 仍保留相容,2008 已移除。**
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';
ALTER ROLE db_owner ADD MEMBER ...)或授予具體權限(GRANT ...)。