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 | +-----------------------+---------------+