Como evitar que um usuário sem permissões liste os bancos de dados existentes em uma instância SQL server ?

Olá pessoal,

Hoje ao conversar com o meu amigo Ricardo ele me fez o seguinte questionamento:  Giuliano, eu criei um usuário e não defini nenhum papel de servidor para ele, dei acesso a ele em um banco de dados, no entanto ele consegue visualizar todos os outros bancos da instância, como faço para que ele somente acesse o banco de dados que ele possui acesso?

Primeiramente respondi ao Ricardo que ele deve remover o usuário guest de cada database (por requisito de segurança – muitas vezes fiz isso no SQL Server 2000), no entanto ao dar uma conferida no SQL Server 2008, percebi que o usuário guest de cada base de dados por padrão é desabilitado e não é possível removê-lo, então comecei a fazer um micro laboratório para encontrar uma alternativa.

Quando incluimos um novo login em uma instância SQL Sever por padrão este login será associado ao papel “public” da instância, este papel possui acesso aos objetos de sistema que lhe permite obter a lista de bancos de dados disponíveis na instância.

Pois bem, criei um usuário em minha instância local e não associei ele a nenhum usuário de banco de dados ou a qualquer papel do servidor, acessei no banco de dados master e na view “sys.sysdatabases” neguei a leitura para a role “public”, funcionou! Não como eu queria, mas o usuário não conseguiu listar mais outros bancos, o problema é que apresentava erros ao conectar via Object Explorer.

Procurei uma forma menor “Bruta”, acessei o login criado e  em seguida dei ao usuário acesso de leitura a um dos bancos de dados em minha instância e na guia “Securables” listei todos os objetos do servidor e localizei uma permissão chamada “View any database” maquei “deny” , em seguida ao conectar com o usuário não houve nenhum erro, e não listou as outras bases de dados, então dei-lhe permissão em um banco e ao reconectar o banco não apareceu na lista, mas eu podia acessa-lo via script e executar consultas normalmente (dei-lhe acesso de leitura apenas).

Pesquisei um pouco sobre a possiblidade de exibir na lista o banco o qual o usuário possuí permissão, mas pelo que encontrei este comportamento já foi documentado no Microsoft connect e o time de desenvolvimento da Microsoft está trabalhando em novas features para tornar isso mais fácil.  (Que saudades do SQL Server 2000 neste ponto!)

Bom, minha sugestão é: Caso você realmente precise implementar esta solução para esconder as bases de dados da instância, tente sempre apontar um banco default para este usuário (que não seja o banco de dados master), com isso, caso este usuário precise de acesso a somente um banco de dados ao conectar via SSMS – Query ele irá apresentar o banco default na lista.

Até a próxima pessoal!

Anúncios

3 Responses to “Como evitar que um usuário sem permissões liste os bancos de dados existentes em uma instância SQL server ?”


  1. 1 Jefferson 12/02/2012 às 04:12

    Olá Amigo, você conseguiu fazer isso de outra forma no SQL Server 2008 R2?

    • 2 giulianocardoso 14/02/2012 às 08:23

      Olá Jefferson,

      Ainda não fiz este teste na versão 2012, mas na versão 2008R2 temos o mesmo comportamento.

  2. 3 Saulo 23/09/2014 às 17:54

    Ola, para que um usuário visualize apenas base de dados especificas podemos usar também:
    use master
    GO
    dany view any database fo [usuario]
    GO
    use [base_de_Dados]
    GO
    drop user [usuario]
    GO
    alter authorization on database::[base_de_Dados] to [usuario]
    GO


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s




Giuliano B. Cardoso,
Administrador de Empresas com Habilitação em Informática, atua em Tecnologia da Informação há mais de 10 anos, especialista em banco de dados SQL Server, atualmente atua como consultor em Business Intelligence e instrutor de cursos oficiais Microsoft.
Possuí as seguintes certificações: ITIL-F, MCP,MCDBA SQL 2000, MCTS SQL 2005/2008, MCITP SQL2005/2008 e MCT

Mais acessados

Anúncios

%d blogueiros gostam disto: