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