Hoje descobrimos que dois de nossos SQL Servers (ambos 2017 CU21) estão aceitando conexões de qualquer conta de domínio aleatório, mesmo aqueles que definitivamente não têm login direto ou acesso via associação ao grupo AD.
Em cada servidor há um banco de dados de usuários que permite que essas contas de domínio aleatórias se conectem.
Com base na configuração que vemos, esperamos que qualquer conta de domínio aleatório (ou seja, qualquer conta que não tenha um login na instância) tenha uma falha de login e, além disso, também seja bloqueada para se conectar ao banco de dados do usuário.
Para esses bancos de dados, a conta de convidado está desabilitada, mas para uma boa medida, executamos:
REVOKE CONNECT FROM guest
Isso não fez diferença.
Então duas perguntas:
- Como podemos desligar/impedir que essas conexões públicas sejam bem-sucedidas?
- Que instrução TSQL poderia nos mostrar a configuração problemática?
Coisas que vimos até agora:
- A função de servidor 'público' parece ter a configuração padrão, igual a todos os nossos outros servidores onde isso não é um problema
- O usuário convidado definitivamente aparece como desabilitado em todos os bancos de dados e servidores
- A função de banco de dados 'pública' tem apenas as permissões padrão que esperamos ver
- É apenas 1 banco de dados de usuário (mais master & msdb & tempdb) em cada servidor que é acessível a essas contas aleatórias -- todos os outros bancos de dados se comportam normalmente, ou seja, a conta não pode se conectar a eles.
- A configuração do tipo de contenção do banco de dados é 'Nenhum' para todos os casos.
- Não há login presente em nenhum dos servidores que abranja todos os usuários do domínio
Algum contexto: os dois servidores estão relacionados -- eles são os servidores DEV e PROD para o mesmo aplicativo. É muito provável que essa configuração tenha sido feita deliberadamente por algum motivo histórico - mas ninguém que trabalha aqui agora sabe o porquê, então gostaríamos de desabilitar esse acesso público.
De acordo com sua descrição, parece-me que as permissões CONNECT SQL (ou talvez CONNECT) foram atribuídas à função de servidor público.
Qualquer login se conecta ao servidor graças ao
CONNECT SQL
concedido a ele diretamente ou a elerole
/windows group
no nível do servidor. Você deve examinar essas funções/grupos e, para isso, você deve representar seu login suspeito executando este código:A primeira parte do código mostra todas as funções/grupos dos quais o login é membro, a segunda mostra qual função/grupo possui
CONNECT SQL
. Portanto, até que seu login seja membro deste último grupo/função, ele se conectará ao seu servidor.Há um script T-SQL em outro post aqui que irá retirar todas as suas permissões database_role.
Também vale a pena notar que
CONNECT SQL
eVIEW DATABASE
são concedidos à função de servidor público por padrão.As contas do Windows herdam permissões por meio da associação ao grupo do Windows. Mesmo que não exista um login para a conta de usuário, a conta ainda pode se conectar se um membro do grupo tiver permissão para fazê-lo.
Execute xp_logininfo , especificando a conta do Windows com problema junto com `all' para listar todos os caminhos de permissão (ou seja, conta e/ou grupo(s)) que fornecem acesso.