sql >> Database teknologi >  >> RDS >> Sqlserver

HAS_DBACCESS() – Find ud af, om en bruger kan få adgang til en database i SQL Server

SQL Server har en HAS_DBACCESS() funktion, der returnerer information om, hvorvidt brugeren har adgang til en specificeret database.

Syntaks

Syntaksen ser sådan ud:

HAS_DBACCESS ( 'database_name' )

Funktionen returnerer 1 hvis brugeren har adgang til databasen, 0 hvis brugeren ikke har adgang til databasen, og NULL hvis databasenavnet ikke er gyldigt.

Det returnerer 0 hvis databasen er offline eller mistænkelig, og den returnerer 0 hvis databasen er i enkeltbrugertilstand, og databasen er i brug af en anden bruger.

Eksempel

Her er et eksempel til demonstration:

SELECT HAS_DBACCESS('KrankyKranes');

Resultat:

1

I dette tilfælde 1 blev returneret, hvilket betyder, at brugeren har adgang til KrankyKranes database.

Ikke-eksisterende database

Hvis databasen ikke eksisterer, er resultatet NULL :

SELECT HAS_DBACCESS('Oops');

Resultat:

NULL

Tjek alle databaser

Vi kan bruge følgende forespørgsel til at kontrollere adgangen til alle databaser i SQL Server-forekomsten:

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å fald havde jeg adgang til alle databaser.

Her er, hvad der sker, når jeg kører forespørgslen som bruger med adgang til 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. Forbedre databasens ydeevne med 400 %

  2. Hellere ALTER end DROP

  3. Finder årsagen til deadlock-fejl fra oracle trace-fil

  4. Essentials og brug af NOLOCK tip i SQL Server