Sql-Server

如何獲取集成安全帳戶的 SQL-server 登錄名?

  • May 23, 2019

假設我是 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在之前的回答中更詳盡的文章 。

引用自:https://dba.stackexchange.com/questions/238869