SQL Server – Usuário só conecta na instância com permissão sysadmin – Login failed for user ‘teste’. Reason: Login-based server access validation failed with an infrastructure error

Visualizações: 195
Tempo de Leitura: 3 minutos

Fala pessoal!
Nesse post, eu gostaria de compartilhar um erro que foi reportado em um grupo do Whatsapp e que eu particularmente, nunca havia visto antes, que era a mensagem de erro abaixo e o relato que os usuários que utilizavam autenticação SQL só conseguiam se conectar na instância se tivessem privilégios de sysadmin.

Login failed for user ‘teste’. Reason: Login-based server access validation failed with an infrastructure error. Check for previous errors

De cara, já pedi pra ele verificar se a instância estava permitindo conexões vindas de autenticação SQL Server, já que o padrão é vir habilitado para aceitar somentes conexões com autenticação Windows (AD):

Resultado:

Primeira validação foi realizada com sucesso. Outro ponto que pode causar esse tipo de erro, são as Triggers de Logon. Pedi que ele verificasse se existiam triggers de logon na instância e, caso existisse, desabilitasse as triggers para testar se era isso que estava bloqueando:

Resultado:

Desativei a trigger e não tinha nada impedindo o login. Vamos olhar no log do SQL Server para ver se temos alguma pista do problema:

A mensagem de erro é bem clara. Meu próximo suspeito agora são as permissões nos endpoints da instância. Vou analisar como está as permissões dos Endpoints:

Resultado:

Problema encontrado! A role public está sem permissão para acessar os endpoints. Alguém provavelmente fez alguma modificação na permissão padrão e os usuários com autenticação SQL não estão com acesso nos endpoints. Para resolver isso, vamos conceder essas permissões:

Resultado:

Agora copie esses comandos de Grant e aplique na sua instância para liberar permissão de CONNECT para a role public em todos os endpoints.

Após isso, os usuários com autenticação SQL Server conseguiram conectar normalmente na instância 🙂

Observação 1: Remover a permissão de CONNECT nos endpoints da role public não está “errado”. O DBA apenas precisa pensar em formas de liberar essa permissão para usuários ou grupos de autenticação SQL, para que eles possam continuar acessando o ambiente sem permissão de sysadmin.

Observação 2: Esse tipo de problema pode acontecer tanto com usuários de autenticação Windows, quanto autenticação SQL.

Espero que tenham gostado desse caso de erro resolvido a partir de um grupo do Whatsapp, e se um dia isso acontecer com vocês também, espero que esse artigo ajude 🙂
Um grande abraço e até a próxima!