SQL Server má HAS_DBACCESS() funkce, která vrací informace o tom, zda má uživatel přístup k zadané databázi.
Syntaxe
Syntaxe vypadá takto:
HAS_DBACCESS ( 'database_name' )
Funkce vrátí 1 pokud má uživatel přístup k databázi, 0 pokud uživatel nemá přístup k databázi, a NULL pokud název databáze není platný.
Vrací 0 pokud je databáze offline nebo podezřelá, a vrátí 0 pokud je databáze v režimu pro jednoho uživatele a databázi používá jiný uživatel.
Příklad
Zde je příklad k demonstraci:
SELECT HAS_DBACCESS('KrankyKranes'); Výsledek:
1
V tomto případě 1 byl vrácen, což znamená, že uživatel má přístup do KrankyKranes databáze.
Neexistující databáze
Pokud databáze neexistuje, výsledek je NULL :
SELECT HAS_DBACCESS('Oops'); Výsledek:
NULL
Zkontrolovat všechny databáze
Ke kontrole přístupu ke všem databázím v instanci SQL Server můžeme použít následující dotaz:
SELECT
name AS DB,
HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases; Výsledek:
+-----------------------+---------------+ | 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 | +-----------------------+---------------+
V tom případě jsem měl přístup ke všem databázím.
Zde je to, co se stane, když spustím dotaz jako uživatel s přístupem k menšímu počtu databází:
SELECT
name AS DB,
HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases; Výsledek:
+-----------------------+---------------+ | 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 | +-----------------------+---------------+