Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

HAS_DBACCESS() - Découvrez si un utilisateur peut accéder à une base de données dans SQL Server

SQL Server a un HAS_DBACCESS() fonction qui renvoie des informations indiquant si l'utilisateur a accès à une base de données spécifiée.

Syntaxe

La syntaxe ressemble à ceci :

HAS_DBACCESS ( 'database_name' )

La fonction renvoie 1 si l'utilisateur a accès à la base de données, 0 si l'utilisateur n'a pas accès à la base de données, et NULL si le nom de la base de données n'est pas valide.

Il renvoie 0 si la base de données est hors ligne ou suspecte, et qu'elle renvoie 0 si la base de données est en mode mono-utilisateur et que la base de données est utilisée par un autre utilisateur.

Exemple

Voici un exemple pour illustrer :

SELECT HAS_DBACCESS('KrankyKranes');

Résultat :

1

Dans ce cas, 1 a été renvoyé, ce qui signifie que l'utilisateur a accès au KrankyKranes base de données.

Base de données inexistante

Si la base de données n'existe pas, le résultat est NULL :

SELECT HAS_DBACCESS('Oops');

Résultat :

NULL

Vérifier toutes les bases de données

Nous pouvons utiliser la requête suivante pour vérifier l'accès à toutes les bases de données de l'instance SQL Server :

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

Résultat :

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

Dans ce cas, j'avais accès à toutes les bases de données.

Voici ce qui se passe lorsque j'exécute la requête en tant qu'utilisateur ayant accès à moins de bases de données :

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

Résultat :

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