sql >> Database >  >> RDS >> Sqlserver

HAS_DBACCESS() – Ontdek of een gebruiker toegang heeft tot een database in SQL Server

SQL Server heeft een HAS_DBACCESS() functie die informatie retourneert over of de gebruiker toegang heeft tot een gespecificeerde database.

Syntaxis

De syntaxis gaat als volgt:

HAS_DBACCESS ( 'database_name' )

De functie retourneert 1 als de gebruiker toegang heeft tot de database, 0 als de gebruiker geen toegang heeft tot de database, en NULL als de databasenaam niet geldig is.

Het retourneert 0 als de database offline of verdacht is, en deze retourneert 0 als de database in de modus voor één gebruiker staat en de database door een andere gebruiker wordt gebruikt.

Voorbeeld

Hier is een voorbeeld om te demonstreren:

SELECT HAS_DBACCESS('KrankyKranes');

Resultaat:

1

In dit geval 1 is geretourneerd, wat betekent dat de gebruiker toegang heeft tot de KrankyKranes database.

Niet-bestaande database

Als de database niet bestaat, is het resultaat NULL :

SELECT HAS_DBACCESS('Oops');

Resultaat:

NULL

Controleer alle databases

We kunnen de volgende query gebruiken om de toegang tot alle databases in de SQL Server-instantie te controleren:

SELECT 
    name AS DB,
    HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases;

Resultaat:

+-----------------------+---------------+
| 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 dat geval had ik toegang tot alle databases.

Dit is wat er gebeurt als ik de query uitvoer als een gebruiker met toegang tot minder databases:

SELECT 
    name AS DB,
    HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases;

Resultaat:

+-----------------------+---------------+
| 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. Zal UUID als primaire sleutel in PostgreSQL slechte indexprestaties geven?

  2. IDLE time-outparameter in Oracle

  3. Wat betekent ORDER BY (SELECT NULL)?

  4. Kan er een impasse optreden met dezelfde toegangsmethode?