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