sql >> Databasteknik >  >> RDS >> Sqlserver

HAS_DBACCESS() – Upptäck om en användare kan komma åt en databas i SQL Server

SQL Server har en HAS_DBACCESS() funktion som returnerar information om huruvida användaren har tillgång till en specificerad databas.

Syntax

Syntaxen ser ut så här:

HAS_DBACCESS ( 'database_name' )

Funktionen returnerar 1 om användaren har tillgång till databasen, 0 om användaren inte har tillgång till databasen, och NULL om databasnamnet inte är giltigt.

Den returnerar 0 om databasen är offline eller misstänkt, och den returnerar 0 om databasen är i enanvändarläge och databasen används av en annan användare.

Exempel

Här är ett exempel att visa:

SELECT HAS_DBACCESS('KrankyKranes');

Resultat:

1

I det här fallet, 1 returnerades, vilket innebär att användaren har tillgång till KrankyKranes databas.

Icke existerande databas

Om databasen inte finns är resultatet NULL :

SELECT HAS_DBACCESS('Oops');

Resultat:

NULL

Kontrollera alla databaser

Vi kan använda följande fråga för att kontrollera åtkomst till alla databaser i SQL Server-instansen:

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

Resultat:

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

I så fall hade jag tillgång till alla databaser.

Det här är vad som händer när jag kör frågan som en användare med tillgång till färre databaser:

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

Resultat:

+-----------------------+---------------+
| 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. Hur ändrar jag standardschemat i sql-utvecklare?

  2. Hur replikerar man endast INSERTs inte DELETEs/UPDATEs på Slony Slave Node?

  3. Programmatiskt hämta SQL Server lagrad procedur källa som är identisk med källan som returneras av SQL Server Management Studio gui?

  4. PostgreSQL BESKRIV TABELL