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