Controlando permissão para visualizar apenas um Database - SQL Server

E aí pessoal, o assunto de hoje é permissão no SQL Server, como o DBA pode garantir que um login visualize apenas um banco de dados específico dentro da instância.


Você pode estar se perguntando qual é o motivo de precisarmos fazer isso em algumas situações e a resposta é simples, custo e segurança! Isso mesmo, é cada vez mais comum que ambientes sejam compartilhados entre vários sistemas diferentes e em alguns casos entre clientes diferentes, isso reduz custo (quer exclusividade, ter um ambiente somente seu, vai pagar mais por isso e muitas vezes é muuuuito mais mesmo!) e já que esta compartilhado não podemos correr o risco de um ver dados ou saber de informações mesmo que o nome do banco de dados do outro.

Imagine você conectar em uma instância onde esta o banco do sistema da sua empresa e ver lá outros 10 bancos de dados, é no mínimo estranho pra não dizer desconfortável e inseguro.


Eu sei que no final, mesmo que não esteja apenas vendo os outros bancos, eles continuam lá. Mas isso se torna um processo até de ética digamos assim, pago pelo meu espaço e só "vejo o meu espaço".


A configuração é muito simples e pode ser aplicada para todos os logins criados.


Vamos por a mão na massa!


Tenho 12 bancos de dados dentro da minha instância SQL2017.


Vou criar um login chamado userChLeague:


USE [master]

GO

CREATE LOGIN userChLeague WITH PASSWORD=N'[email protected]', DEFAULT_DATABASE=[master],

DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

GO


Até o momento o login esta vinculado apenas a server role Public que é padrão quando se cria o login. O segundo passo é negar a permissão de visualização de todos os bancos de dados, fazemos isso através do comando abaixo:


DENY VIEW ANY DATABASE TO userChLeague

GO


Vou selecionar o banco de dados DBchampionsLeague e alterar o owner(dono) dessa base para o login que criamos nos passos anteriores (mesclar um login com DENY VIEW ANY DATABASE com um usuário db_owner não funcionará, precisa ser o owner da base mesmo).


USE DBchampionsLeague

GO

SP_changedbowner userChLeague

GO


Ao acessar com o login criado e expandir os bancos de dados vemos apenas o banco em que ele é o dono.

Confirmando:


Simples e rápido de configurar não é mesmo? Existe uma variação que é negar a visualização de todos os bancos de dados para a server role Public por padrão, assim todo login criado de cara já não poderá ver os bancos, verá apenas aqueles em que ele for o owner.

* Antes de fazer o procedimento em um ambiente de produção, valide em um ambiente de testes e veja como a aplicação irá se comportar.


Gostou do post? Deixe o seu comentário!


Nos acompanhe em nossas redes sociais!

Grupo VIP Telegram: DBA On boarding

Youtube(vídeos novos todas as quartas): DBA On boarding

Face & Instagram(conteúdo diário): DBA On boarding


Até a próxima, tchau!

72 visualizações0 comentário