Przeglądając właściwości konkretnego logowania, można zobaczyć listę użytkowników zmapowanych na ten login:
Profilowałem SQL Server Management Studio (SSMS) i widzę, że SSMS łączy się z każdą bazą danych pojedynczo i pobiera informacje z sys.database_permissions
Czy jest możliwe napisanie pojedynczego zapytania, które pobiera informacje o mapowaniu użytkownika pokazane powyżej, czy też jestem zmuszony użyć kursora lub sp_MSforeachdb lub czegoś takiego?
sql-server
sql-server-2008
permissions
security
logins
Michael J Swart
źródło
źródło
Odpowiedzi:
Oto jeden ze sposobów korzystania z dynamicznego SQL. Nie ma naprawdę żadnego sposobu na zrobienie tego bez iteracji, ale takie podejście jest znacznie bezpieczniejsze niż nieudokumentowane, nieobsługiwane i błędne opcje, takie jak
sp_MSforeachdb
.Spowoduje to wyświetlenie listy wszystkich internetowych baz danych, zmapowanego użytkownika (jeśli istnieje) wraz z domyślną nazwą schematu i rozdzieloną przecinkami listą ról, do których należą.
źródło
Ten skrypt został nieznacznie zmodyfikowany w stosunku do skryptu, o którym wspomniano, zrobi to, czego szukasz. Zamień „ThursdayClass” na login, dla którego potrzebujesz informacji. https://www.simple-talk.com/sql/sql-tools/the-sqlcmd-workbench/
źródło
Spróbuj sp_dbpermissions . Prawdopodobnie dostarczy Ci więcej informacji, niż potrzebujesz, ale zrobi to, co chcesz.
Po zainstalowaniu uruchom to.
Uczciwe ostrzeżenie w tej chwili dopasowuje się do „podobnego”, więc jeśli inne loginy są podobne i pasują, zobaczysz je również. Na przykład
MyLogin
iMyLoginForThis
oba będą pasowaćMyLogin
. Jeśli to problem, mam wersję, której jeszcze nie wydałem, w której można ją wyłączyć. Daj mi znać, a prześlemy Ci wiadomość e-mail.źródło
Oto rozwiązanie PowerShell:
źródło
Niestety będziesz musiał iterować po wszystkich bazach danych, aby uzyskać informacje. Będziesz chciał dołączyć
sys.database_principals
dosys.server_principals
każdego dopasowania bazy danych na SID.Nie używaj,
sp_msforeachdb
ponieważ czasami pomija się bazy danych.źródło
Szukałem podobnej odpowiedzi i znalazłem to: https://www.pythian.com/blog/httpconsultingblogs-emc-comjamiethomsonarchive20070209sql-server-2005_3a00_-view-all-permissions-_2800_2_2900_-aspx/ . I tak, używa przerażającego sp_MSforeachDB, ale myślę, że ten facet czasami dostaje zły rap ... ;-)
Prześlę tutaj SQL dla łatwego kopiowania makaronu ( NIE biorę za to zasługi, po prostu udostępniam go łatwo!):
źródło
Poniższe zapytanie zwróci odwzorowania dla żądanej nazwy DbName
Ulepszone zapytanie jest poniżej
źródło
Co
EXEC master..sp_msloginmappings
?źródło
sp_msloginmappings
przed wysłaniem sprawdziłeś, czy jest nieudokumentowany i nieobsługiwany?