Wie Login-Namen, Datenbank-Benutzername oder Rollen von Sqlserver Domain Benutzern zu finden, die nicht ihre eigene Login haben?
-
28-09-2019 - |
Frage
Ich habe ein Login und Datenbankbenutzer „MYDOMAIN \ Domänen-Benutzer“ genannt erstellt. Ich muss herausfinden, welche Rolle ein auf Domain-Benutzer angemeldet hat, aber alle Anrufe der aktuelle Benutzer erhalten die Domain zurückkehren Benutzernamen zB. „MYDOMAIN \ Benutzername“ nicht die Datenbank-Benutzernamen zB. "MYDOMAIN \ Domänen-Benutzer".
Zum Beispiel dieser Abfrage gibt "MYDOMAIN \ Benutzername"
select original_login(),suser_name(), suser_sname(), system_user, session_user, current_user, user_name()
Und diese Abfrage liefert 0
select USER_ID()
Ich möchte den Benutzernamen Abfrage database_role_members gibt es eine Funktion, die es oder irgendeine andere Art und Weise zurückkehren werde ich die aktuellen Nutzer Rollen bekommen?
Lösung
Ich verstehe, dass der Domain-Benutzer Login in AD-Gruppe zugeordnet wird?
Sie müssen bedenken, dass Benutzer in mehreren AD-Gruppen sein können und jeder von ihnen kann irgendwie in der Datenbank abgebildet wird, ein bisschen chaotisch sein kann. Auch ist es bedeutet, dass Sie etwas mit mehreren Ergebnissen brauchen:)
Versuchen Sie diese:
select * from sys.server_principals where type_desc = 'WINDOWS_GROUP' and is_member(name) = 1
ich denke, es richtig alle Windows-Gruppen-Logins greifen sollten, die mit bestimmten Benutzer gebunden werden. Danach können Sie es für Datenbankbenutzer d.h beitreten können.
Select u.name from YourDB.sys.syslogins l
inner join YourDB.sys.sysusers u
on l.sid = u.sid
where l.loginname = ANY (select * from sys.server_principals where type_desc = 'WINDOWS_GROUP' and is_member(name) = 1)
Sie müssen bedenken, dass - den ganzen Weg - Sie können ganze Sätze behandeln müssen vielmehr dann einzelne Werte
.