SQL Server ma funkcję HAS_DBACCESS()
funkcja zwracająca informacje o tym, czy użytkownik ma dostęp do określonej bazy danych.
Składnia
Składnia wygląda tak:
HAS_DBACCESS ( 'database_name' )
Funkcja zwraca 1
jeśli użytkownik ma dostęp do bazy danych, 0
jeśli użytkownik nie ma dostępu do bazy danych, a NULL
jeśli nazwa bazy danych jest nieprawidłowa.
Zwraca 0
jeśli baza danych jest offline lub podejrzana i zwraca 0
jeśli baza danych jest w trybie jednego użytkownika, a baza danych jest używana przez innego użytkownika.
Przykład
Oto przykład do zademonstrowania:
SELECT HAS_DBACCESS('KrankyKranes');
Wynik:
1
W tym przypadku 1
został zwrócony, co oznacza, że użytkownik ma dostęp do KrankyKranes
baza danych.
Nieistniejąca baza danych
Jeśli baza danych nie istnieje, wynikiem jest NULL
:
SELECT HAS_DBACCESS('Oops');
Wynik:
NULL
Sprawdź wszystkie bazy danych
Możemy użyć następującego zapytania, aby sprawdzić dostęp do wszystkich baz danych w instancji SQL Server:
SELECT
name AS DB,
HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases;
Wynik:
+-----------------------+---------------+ | DB | HasDBAccess | |-----------------------+---------------| | master | 1 | | tempdb | 1 | | model | 1 | | msdb | 1 | | Music | 1 | | KrankyKranes | 1 | | Test | 1 | | WideWorldImporters | 1 | | World | 1 | | DomainDispute | 1 | | PetHotel | 1 | | StereoSystems | 1 | | NarrowNationExporters | 1 | +-----------------------+---------------+
W takim przypadku miałem dostęp do wszystkich baz danych.
Oto, co się dzieje, gdy uruchamiam zapytanie jako użytkownik z dostępem do mniejszej liczby baz danych:
SELECT
name AS DB,
HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases;
Wynik:
+-----------------------+---------------+ | DB | HasDBAccess | |-----------------------+---------------| | master | 1 | | tempdb | 1 | | model | 0 | | msdb | 1 | | Music | 0 | | KrankyKranes | 0 | | Test | 1 | | WideWorldImporters | 0 | | World | 0 | | DomainDispute | 0 | | PetHotel | 0 | | StereoSystems | 0 | | NarrowNationExporters | 0 | +-----------------------+---------------+