Sql-Server
如何獲取集成安全帳戶的 SQL-server 登錄名?
假設我是 Windows 域 DC(數據中心)的使用者。
我的使用者名是 DC\Somebody
我在組 DC\Developers
現在 SQL-Server 有一個名為 DC\Developers 的登錄組,通過它,我可以登錄到具有集成安全性的伺服器上。
我現在正在嘗試獲取 SQL-Server 登錄名(我的意思是 DC\Developers),但我不知道如何。我能得到的只是使用者名(DC\Somebody)。
但我想獲得 DC\Developers。
我怎樣才能做到這一點 ?
這是我到目前為止嘗試的功能,但沒有成功:
SELECT -- http://blog.sqlconcepts.co.nz/2011/07/who-am-i.html ORIGINAL_LOGIN() AS OriginalLogin ,SUSER_SNAME() AS CurrentContext ,SESSION_USER AS SessionUser ,SYSTEM_USER AS SystemUser ,CURRENT_USER AS CurrentUser ,user AS "WhichUserIsThat?" ,ORIGINAL_LOGIN() AS OriginalLogin ,USER_NAME() AS UserName
此外,如果將多個組添加為 sql-server 登錄名,並且我是所有組的成員,然後我以集成安全性登錄,會發生什麼情況。它將需要哪個登錄?它似乎是按字母順序排列的第一個…
DC\Somebody
在您的登錄名所屬的實例上獲取具有現有登錄名的 AD 組xp_logininfo
EXEC xp_logininfo 'DC\Somebody','all';
sys.login_token
SELECT DISTINCT lt.name FROM sys.login_token lt INNER JOIN sys.server_principals sp ON lt.principal_id = sp.principal_id AND sp.type != 'R' WHERE lt.name NOT IN (SELECT name FROM sys.database_principals WHERE type = 'R' AND name IS NOT NULL) AND sp.type != 'R';
使用模擬驗證其他登錄的範例
EXECUTE AS LOGIN ='DOMAIN\a-rvertongen'; SELECT DISTINCT lt.name FROM sys.login_token lt INNER JOIN sys.server_principals sp ON lt.principal_id = sp.principal_id WHERE lt.name NOT IN (SELECT name FROM sys.database_principals WHERE type = 'R' AND name IS NOT NULL) AND sp.type != 'R'; REVERT;
結果
name DOMAIN\a-rvertongen DOMAIN\SERVER_RO DOMAIN\SERVER_sysadmin BUILTIN\Administrators
另外,如果將多個組添加為 sql-server 登錄名,並且我是所有組的成員,然後我以集成安全性登錄,會發生什麼情況。需要哪個登錄名?
多個 AD 組的權限
您將被授予 每個
GRANT
. 優先於權限。DENY``AD Group``DENY``GRANT
可以在這裡找到@Max Vernon在之前的回答中更詳盡的文章 。