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