2009-11-11 12 views
7

Ich habe eine SQL Server 2008-Instanz mit mehreren Datenbanken und ich schreibe gerade eine C# -Anwendung für den Zugriff auf diese Datenbanken. In dieser App kann der Endbenutzer eine Datenbank auswählen, mit der er sich verbinden möchte.Get Liste der Datenbanken Benutzer hat Zugriff auf

Ich habe bereits eine Liste aller Datenbanken auf dem Server, wie kann ich diese Liste auf die Datenbanken beschränken, in denen sich der Benutzer anmelden kann? Oder, wie kann ich diese Liste abfragen?

Es gibt viele Datenbanken, aber jeder Benutzer kann nur auf einige von ihnen zugreifen. Daher ist es wahrscheinlich keine gute Idee, eine Verbindung herzustellen und die Exception abzufangen.

Fyi: Der Server ist nur für die Windows-Authentifizierung konfiguriert, und die Anmeldungen an den Server werden für Windows-Benutzergruppen (nicht einzelne Benutzer) erstellt.

Antwort

16

können Sie abfragen, alle Datenbanken von sys.sysdatabases, und prüfen Sie, ob der Benutzer den Zugriff mit HAS_DBACCESS hat:

SELECT name 
FROM sys.sysdatabases 
WHERE HAS_DBACCESS(name) = 1 
+0

Gibt es eine Möglichkeit, diese Abfrage zu erweitern Datenbanken auf verknüpften Servern enthalten? –

0

Vielleicht als eine Alternative zu Andomars Antwort (die Ich mag!) Sie können Active Directory abfragen, um festzustellen, ob Der Benutzer ist Mitglied einer gültigen Gruppe für Ihre Datenbank. Ich vermute, das würde bedeuten, dass Sie einige Windows-Gruppe zu Datenbank-Name-Lookup beibehalten müssten.

-1

können Sie das System gespeichert verwenden Prozedur sp_helplogins ‚Benutzername‘

Verwandte Themen