sql >> Databáze >  >> RDS >> Sqlserver

HAS_DBACCESS() – Zjistěte, zda má uživatel přístup k databázi na serveru SQL Server

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

  1. TSQL - Jak používat GO uvnitř bloku BEGIN .. END?

  2. ORACLE Connect by klauzule ekvivalentní v SQL Server

  3. Hodnoty oddělené čárkou s dotazem SQL

  4. Vnitřní části sedmi druhů SQL Server – část 2