2009-11-11 15 views
7

Mam instancję SQL Server 2008 z kilkoma bazami danych i obecnie piszę aplikację C#, aby uzyskać dostęp do tych baz danych. W tej aplikacji użytkownik końcowy może wybrać bazę danych, z którą chce się połączyć.Uzyskaj listę baz danych użytkownik ma dostęp do

Mam już listę wszystkich baz danych na serwerze, w jaki sposób mogę ograniczyć tę listę do tych baz danych, do których użytkownik może się logować? Lub, jak mogę zapytać o tę listę?

Istnieje wiele baz danych, ale każdy użytkownik może uzyskać dostęp tylko do niektórych z nich, więc próba połączenia i przechwycenia wyjątku nie jest prawdopodobnie dobrym pomysłem.

Fyi: Serwer jest skonfigurowany wyłącznie do uwierzytelniania systemu Windows, a logowanie do serwera jest tworzone dla grup użytkowników Windows (nie dla indywidualnych użytkowników).

Odpowiedz

16

Można zapytać wszystkich baz danych z sys.sysdatabases i sprawdzić, czy użytkownik ma dostęp z HAS_DBACCESS:

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

Czy istnieje sposób, aby rozszerzyć tę kwerendę do włączenia baz danych na serwerach połączonych? –

0

Może jako alternatywa dla Andomars odpowiedź (co lubię!) Można przesłuchać Active Directory, aby sprawdzić, czy użytkownik jest członkiem prawidłowej grupy dla twojej bazy danych. Podejrzewam, że oznaczałoby to, że będziesz musiał zachować niektóre grupy Windows do wyszukiwania nazwy bazy danych.

-1

Można korzystać z systemu przechowywane procedury „Nazwa użytkownika” sp_helplogins

Powiązane problemy