Gostaria de saber se existe alguma maneira de permitir que um usuário visualize apenas os bancos de dados específicos aos quais ele tem acesso. Por exemplo. Digamos que temos um AlwaysOn com um banco de dados somente local e 10 bancos de dados que são adicionados ao AO. O usuário precisa de direitos de leitura para um dos 10 bancos de dados adicionados no AO. Mas ao conceder direitos de usuário a esse banco de dados e ele se conectar ao AO, ele pode visualizar todos os bancos de dados, mas apenas acessar o que ele tem direitos, é claro. E se o AO estiver ativo onde o banco de dados local está localizado, ele também verá esse.
Tentamos algumas coisas, mas nada bem-sucedido e, pelo que lemos, não parece ser um caminho, a menos que o usuário receba direitos de dbowner.
Alguém tem alguma ideia?
Por padrão, um login pode ver todos os bancos de dados em um servidor.
Você pode
DENY VIEW ANY DATABASE TO [your login or serverrole];
, após o que um login só pode ver os bancos de dados onde ele tem acesso.Para verificar quais bancos de dados um login pode ver, tente isso quando estiver conectado como usuário administrativo:
A
VIEW ANY DATABASE
permissão é atribuída ao principal no nível do servidor (o logon, ou seja, não o usuário, que é o principal no nível do banco de dados) e, portanto, você precisará aplicá-la a cada réplica do grupo de disponibilidade. Eu recomendaria que você aplicasse (negasse) essa permissão em uma função de servidor em vez de usuários individuais para mantê-la gerenciável.Leitura mais detalhada sobre o assunto:
https://www.mssqltips.com/sqlservertip/3399/verify-the-databases-a-sql-server-login-can-see--and-why/
A partir do SQL Server 2012, você pode usar bancos de dados independentes conforme descrito aqui: Recurso de banco de dados contido do SQL Server 2012
Não há necessidade de criar logins, é um banco de dados que o autentica. Como consequência, o usuário não vê nada além de seus bancos de dados
Use o comando DCL para operar em banco de dados específico.
Então
commit();
Assim, o usuário lerá apenas o objeto do banco de dados.