Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

HAS_DBACCESS() – Scopri se un utente può accedere a un database in SQL Server

SQL Server ha un HAS_DBACCESS() funzione che restituisce informazioni sul fatto che l'utente abbia accesso a un database specificato.

Sintassi

La sintassi è questa:

HAS_DBACCESS ( 'database_name' )

La funzione restituisce 1 se l'utente ha accesso al database, 0 se l'utente non ha accesso al database e NULL se il nome del database non è valido.

Restituisce 0 se il database è offline o sospetto e restituisce 0 se il database è in modalità utente singolo e il database è utilizzato da un altro utente.

Esempio

Ecco un esempio da dimostrare:

SELECT HAS_DBACCESS('KrankyKranes');

Risultato:

1

In questo caso, 1 è stato restituito, il che significa che l'utente ha accesso a KrankyKranes banca dati.

Database inesistente

Se il database non esiste, il risultato è NULL :

SELECT HAS_DBACCESS('Oops');

Risultato:

NULL

Controlla tutti i database

Possiamo utilizzare la query seguente per verificare l'accesso a tutti i database nell'istanza di SQL Server:

SELECT 
    name AS DB,
    HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases;

Risultato:

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

In quel caso, avevo accesso a tutti i database.

Ecco cosa succede quando eseguo la query come utente con accesso a meno database:

SELECT 
    name AS DB,
    HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases;

Risultato:

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