Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

HAS_DBACCESS() – Dowiedz się, czy użytkownik może uzyskać dostęp do bazy danych w SQL Server

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie SQL, aby znaleźć N-tą najwyższą pensję z tabeli wynagrodzeń

  2. Dostęp do zestawów wyników z poziomu Procedury składowane Transact-SQL SQL Server

  3. SQL Server, Jak ustawić automatyczny przyrost po utworzeniu tabeli bez utraty danych?

  4. Dostrajanie SQL Server – chodzi o pomiar

  5. Architektura programu SQL Server AlwaysOn (grupa dostępności) i instalacja krok po kroku -1