Wenn Sie sich die Eigenschaften eines bestimmten Logins ansehen, können Sie eine Liste der Benutzer sehen, die diesem Login zugeordnet sind:
Ich habe ein Profil für SQL Server Management Studio (SSMS) erstellt und festgestellt, dass SSMS nacheinander eine Verbindung zu jeder Datenbank herstellt und Informationen aus sys.database_permissions abruft
Ist es möglich, eine einzelne Abfrage zu schreiben, die die oben gezeigten Benutzerzuordnungsinformationen abruft, oder bin ich gezwungen, einen Cursor oder sp_MSforeachdb oder ähnliches zu verwenden?
sql-server
sql-server-2008
permissions
security
logins
Michael J Swart
quelle
quelle
Antworten:
Hier ist eine Möglichkeit, dynamisches SQL zu verwenden. Es gibt eigentlich keine Möglichkeit, dies ohne Iteration zu tun, aber dieser Ansatz ist viel sicherer als undokumentierte, nicht unterstützte und fehlerhafte Optionen wie
sp_MSforeachdb
.Daraufhin wird eine Liste aller Onlinedatenbanken, des zugeordneten Benutzers (sofern vorhanden) zusammen mit dem Standardschemanamen und einer durch Kommas getrennten Liste der Rollen, zu denen sie gehören, angezeigt.
quelle
Dieses Skript wurde geringfügig von einem Skript geändert, das nach Belieben verwendet wird, um das zu tun, was Sie suchen. Ersetzen Sie 'ThursdayClass' durch das Login, für das Sie Informationen benötigen. https://www.simple-talk.com/sql/sql-tools/the-sqlcmd-workbench/
quelle
Versuchen Sie es mit sp_dbpermissions . Es wird Ihnen wahrscheinlich mehr Informationen geben, als Sie benötigen, aber es wird tun, was Sie wollen.
Sobald es installiert ist, führe dies aus.
Faire Warnung: Im Moment wird eine "Gefällt mir" -Anpassung durchgeführt. Wenn andere Anmeldungen ähnlich sind und übereinstimmen, werden sie auch angezeigt. Zum Beispiel
MyLogin
undMyLoginForThis
beide stimmen übereinMyLogin
. Wenn das ein Problem ist, habe ich eine Version, die ich noch nicht veröffentlicht habe, wo Sie das ausschalten können. Lassen Sie es mich wissen und ich kann es Ihnen per E-Mail senden.quelle
Hier ist eine PowerShell-Lösung:
quelle
Leider müssen Sie alle Datenbanken durchlaufen, um die Informationen zu erhalten. Sie werden beitreten möchten ,
sys.database_principals
umsys.server_principals
auf der SID für jede Datenbank - Matching.Nicht verwenden,
sp_msforeachdb
da es bekannt ist, dass Datenbanken manchmal fehlen.quelle
Ich suchte nach einer ähnlichen Antwort und fand diese: https://www.pythian.com/blog/httpconsultingblogs-emc-comjamiethomsonarchive20070209sql-server-2005_3a00_-view-all-permissions-_2800_2_2900_-aspx/ . Und ja, es benutzt die gefürchtete sp_MSforeachDB, aber ich denke, dieser Typ bekommt manchmal einen schlechten Ruf ... ;-)
Ich werde den SQL-Code hier veröffentlichen, um einfache Copy-Pasta zu erhalten (ich nehme das NICHT an, mache es nur einfach zugänglich!):
quelle
Die folgende Abfrage gibt die Zuordnungen für den angeforderten Datenbanknamen zurück
Eine verbesserte Abfrage finden Sie weiter unten
quelle
Was ist
EXEC master..sp_msloginmappings
?quelle
sp_msloginmappings
vor dem Posten überprüft, ob die Dokumente undokumentiert sind und nicht unterstützt werden?