Lorsque vous regardez les propriétés d'une connexion particulière, il est possible de voir une liste d'utilisateurs mappés à cette connexion:
J'ai profilé SQL Server Management Studio (SSMS) et je vois que SSMS se connecte à chaque base de données une par une et récupère les informations de sys.database_permissions
Est-il possible d'écrire une seule requête qui récupère les informations de mappage utilisateur indiquées ci-dessus ou suis-je obligé d'utiliser un curseur ou sp_MSforeachdb ou quelque chose comme ça?
sql-server
sql-server-2008
permissions
security
logins
Michael J Swart
la source
la source
Réponses:
Voici une façon d'utiliser le SQL dynamique. Il n'y a pas vraiment de moyen de le faire sans itérer, mais cette approche est beaucoup plus sûre que les options non documentées, non prises en charge et boguées
sp_MSforeachdb
.Cela obtiendra une liste de toutes les bases de données en ligne, l'utilisateur mappé (s'il existe) avec le nom de schéma par défaut et une liste séparée par des virgules des rôles auxquels ils appartiennent.
la source
Ce script est légèrement modifié à partir d'un script mentionné à fera ce que vous cherchez. Remplacez «ThursdayClass» par la connexion dont vous avez besoin d'informations. https://www.simple-talk.com/sql/sql-tools/the-sqlcmd-workbench/
la source
Essayez sp_dbpermissions . Il vous donnera probablement plus d'informations que vous n'en avez besoin, mais il fera ce que vous voulez.
Une fois installé, exécutez ceci.
Juste avertissement pour le moment, il fait une correspondance "J'aime", donc si d'autres connexions sont similaires et correspondent, vous les verrez également. Par exemple,
MyLogin
etMyLoginForThis
correspondront tous les deuxMyLogin
. Si c'est un problème, j'ai une version que je n'ai pas encore publiée où vous pouvez la désactiver. Faites le moi savoir et je pourrai vous l'envoyer par e-mail.la source
Voici une solution PowerShell:
la source
Malheureusement, vous devrez parcourir toutes les bases de données pour obtenir les informations. Vous voudrez vous joindre
sys.database_principals
àsys.server_principals
chaque base de données correspondant sur le SID.Ne l'utilisez pas
sp_msforeachdb
car il est connu de manquer des bases de données à certains moments.la source
Je cherchais une réponse similaire et j'ai trouvé ceci: https://www.pythian.com/blog/httpconsultingblogs-emc-comjamiethomsonarchive20070209sql-server-2005_3a00_-view-all-permissions-_2800_2_2900_-aspx/ . Et oui, il utilise le redouté sp_MSforeachDB, mais je pense que ce gars obtient parfois un mauvais rap ... ;-)
Je posterai le SQL ici pour des pâtes de copie faciles (je ne prends pas le crédit pour cela, je le rend facilement accessible!):
la source
Ci-dessous, la requête doit renvoyer les mappages pour le DbName demandé.
La requête améliorée est ci-dessous
la source
Et alors
EXEC master..sp_msloginmappings
?la source
sp_msloginmappings
était sans papiers et sans support avant de poster?