Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

HAS_DBACCESS() – Descubra se um usuário pode acessar um banco de dados no SQL Server


SQL Server tem um HAS_DBACCESS() função que retorna informações sobre se o usuário tem acesso a um banco de dados especificado.

Sintaxe


A sintaxe fica assim:
HAS_DBACCESS ( 'database_name' )

A função retorna 1 se o usuário tiver acesso ao banco de dados, 0 se o usuário não tiver acesso ao banco de dados, e NULL se o nome do banco de dados não for válido.

Ele retorna 0 se o banco de dados estiver offline ou suspeito e retornar 0 se o banco de dados estiver no modo de usuário único e o banco de dados estiver sendo usado por outro usuário.

Exemplo


Segue um exemplo para demonstrar:
SELECT HAS_DBACCESS('KrankyKranes');

Resultado:
1

Nesse caso, 1 foi retornado, o que significa que o usuário tem acesso ao KrankyKranes base de dados.

Banco de dados inexistente


Se o banco de dados não existir, o resultado será NULL :
SELECT HAS_DBACCESS('Oops');

Resultado:
NULL

Verificar todos os bancos de dados


Podemos usar a seguinte consulta para verificar o acesso a todos os bancos de dados na instância do 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             |
+-----------------------+---------------+

Nesse caso, tive acesso a todos os bancos de dados.

Veja o que acontece quando executo a consulta como usuário com acesso a menos bancos de dados:
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             |
+-----------------------+---------------+