Avaliamos as políticas de "práticas recomendadas" da Microsoft (localizadas em C:\Program Files (x86)\Microsoft SQL Server\number\Tools\Policies\DatabaseEngine\1033
) em cada uma de nossas instâncias do SQL Server (exemplo aqui ). O seguinte problema foi sinalizado para nós:
Isso fornece um link para uma página da Microsoft que declara o seguinte como prática recomendada:
Não conceda permissões de servidor à função pública de servidor.
Ao revisar a segurança, podemos ver que a função pública tem permissões de servidor para visualizar qualquer banco de dados por padrão. Executamos o seguinte e reavaliamos a política, mas o problema ainda está sinalizado.
REVOKE VIEW ANY DATABASE TO [public] AS [sa];
As únicas outras permissões atribuídas a essa função de servidor são permissões de ponto de extremidade para poder se conectar via TCP/VIA/pipes nomeados/máquina local. Se os removermos, certamente o papel será supérfluo.
PERGUNTAS
- Devemos nos preocupar com isso? Isso é algo que realmente devemos procurar resolver?
- O que mais precisamos fazer para resolver adequadamente esse problema?
- Existem implicações para fazer isso ou não fazer isso?
Sim, você deve corrigir isso. Se você tiver vários bancos de dados no servidor, um usuário legítimo em um banco de dados pode não ter nada a fazer em outro banco de dados e não será um usuário nele e, portanto, 'público'. Por que você daria permissão ao usuário público para visualizar/acessar objetos em um banco de dados ao qual eles não têm direito?
Certifique-se de testar o aplicativo depois de corrigi-los. Às vezes, até mesmo um usuário legítimo pode estar sem permissão de concessão apropriada e pode estar trabalhando com base no acesso público, o que não funcionará depois que você corrigir o acesso de função 'público'. Eles precisam receber acesso explícito por meio de conceder stmt a objetos específicos ou por meio de funções de banco de dados ou por meio de funções de usuário.
Ao revogar a permissão "exibir qualquer banco de dados" da função de servidor público, os logons não podem mais ver os bancos de dados consultando
select * from sys.databases
(excetomaster
etempdb
), mas podem facilmente contornar essa revogação consultando:Então, essa "melhor prática" soa bem, mas não vale nada.