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