sql >> Base de Datos >  >> RDS >> Sqlserver

HAS_DBACCESS():descubre si un usuario puede acceder a una base de datos en SQL Server

SQL Server tiene un HAS_DBACCESS() función que devuelve información sobre si el usuario tiene acceso a una base de datos específica.

Sintaxis

La sintaxis es así:

HAS_DBACCESS ( 'database_name' )

La función devuelve 1 si el usuario tiene acceso a la base de datos, 0 si el usuario no tiene acceso a la base de datos, y NULL si el nombre de la base de datos no es válido.

Devuelve 0 si la base de datos está fuera de línea o sospechosa y devuelve 0 si la base de datos está en modo de usuario único y otro usuario la está utilizando.

Ejemplo

Aquí hay un ejemplo para demostrarlo:

SELECT HAS_DBACCESS('KrankyKranes');

Resultado:

1

En este caso, 1 fue devuelto, lo que significa que el usuario tiene acceso a KrankyKranes base de datos.

Base de datos inexistente

Si la base de datos no existe, el resultado es NULL :

SELECT HAS_DBACCESS('Oops');

Resultado:

NULL

Comprobar todas las bases de datos

Podemos usar la siguiente consulta para verificar el acceso a todas las bases de datos en la instancia de SQL Server:

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

Resultado:

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

En ese caso, tenía acceso a todas las bases de datos.

Esto es lo que sucede cuando ejecuto la consulta como un usuario con acceso a menos bases de datos:

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

Resultado:

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