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