Partilhar via


Problemas de autenticação intermitente ou periódica no SQL Server

Observação

Antes de começar a solucionar problemas, recomendamos que você verifique os pré-requisitos e acesse a lista de verificação. Para obter mais informações, consulte Artigos de autoajuda.

Este artigo descreve as causas comuns de problemas de autenticação intermitente na conectividade do SQL Server e fornece soluções.

Sintomas

Problemas de autenticação intermitentes ou periódicos na conectividade do SQL Server ocorrem quando usuários ou aplicativos enfrentam dificuldades esporádicas de autenticação com o banco de dados do SQL Server. Isso causa interrupções no acesso aos dados e na funcionalidade do aplicativo.

As mensagens de erro mais comuns

  • Não é possível gerar contexto SSPI

  • Falha no logon do usuário

    • Falha de logon para o usuário ""
    • Falha no logon do usuário 'NT AUTHORITY\ANONYMOUS LOGON'
    • Falha no login do usuário '<UserName>'
    • Falha no login do usuário '<Domínio>\<Nome de> usuário'
    • Falha no logon. O logon é de um domínio não confiável e não pode ser usado com a autenticação do Windows.

Causa

Os problemas mais comuns são causados pelo desempenho do SQL Server ou pela resposta lenta do controlador de domínio. Se estiver usando o NTLM (NTLM (NTLM), o LSASS (Serviço de Subsistema de Autoridade de Segurança Local) terá um gargalo e limitará quantas novas conexões podem ser processadas de uma só vez. Outras solicitações são copiadas e podem atingir o tempo limite. Algumas causas, como o antivírus, podem ser difíceis de provar, mas ainda são comuns e devem ser investigadas mesmo sem provas concretas, se outras vias de investigação forem ineficazes.

Processo de solução de problemas

Como o problema é intermitente, é provável que a configuração, como SPNs (Nomes de Entidade de Serviço) Kerberos, esteja correta. Para resolver esse problema, tente as seguintes etapas de solução de problemas:

Diferença de latência entre vários domínios ou data centers

Se vários domínios ou data centers estiverem envolvidos, verifique se os usuários no domínio local ou no data center não enfrentam o problema enquanto os usuários em outros domínios ou data centers o fazem. Nesse caso, isso pode indicar uma latência de comunicação entre data centers ou controladores de domínio. Use os seguintes comandos para investigar o problema:

  • Para verificar a latência da rede, use ping. Por exemplo:

    1. Executar o comando: ping <DatabaseServer>.

    2. Examine a coluna de tempo e compare esse tempo com o do outro domínio ou data center:

      Pinging <DatabaseServer> [10.10.10.3] with 32 bytes of data:
      Reply from 10.10.10.3: bytes=32 time=68ms TTL=116
      Reply from 10.10.10.3: bytes=32 time=67ms TTL=116
      Reply from 10.10.10.3: bytes=32 time=67ms TTL=116
      
  • Para testar problemas de latência de validação de credenciais, use Runas com vários usuários. Por exemplo:

    1. Execute runas /user:<DomainName>\<UserAccountName> cmd.exe.
    2. Digite a senha do usuário depois que um prompt de comando for exibido.

Se o problema persistir mesmo após o teste com esses comandos, o problema não será com o SQL Server, mas com a infraestrutura de rede ou o desempenho do controlador de domínio.

Procure problemas de desempenho no log de erros do SQL Server

O log de erros do SQL Server pode revelar problemas de desempenho no SQL Server, como entradas que indicam que a E/S está demorando mais de 15 segundos. A equipe de desempenho do SQL tem PSSDIAG para executar e analisar. Talvez seja necessário fazer isso se um rastreamento de rede revelar atrasos nas respostas do SQL Server.

O log de erros também pode incluir outros erros relacionados ao domínio, como o seguinte log de erros que indica alguns problemas de desempenho do Active Directory:

SSPI handshake failed with error code 0x80090311 while establishing a connection with integrated security; the connection has been closed.
SSPI handshake failed with error code 0x80090304 while establishing a connection with integrated security; the connection has been closed.

Os seguintes códigos de erro do sistema operacional indicam a causa da falha:

  • Erro -2146893039 (0x80090311): Nenhuma autoridade pôde ser contatada para autenticação.

  • Erro -2146893052 (0x80090304): A Autoridade de Segurança Local não pode ser contatada.

Examine os logs de eventos no sistema cliente para erros de rede

O log de eventos do sistema tem vários eventos, como Kerberos, LSA (Autoridade de Segurança Local) e eventos Netlogon. Esses eventos indicam que o computador não pode se conectar ao controlador de domínio por algum tempo. Para torná-los mais fáceis de encontrar, filtre apenas os eventos Erro, Aviso e Crítico . A hora do evento precisa ser em torno da hora da interrupção. Se houver uma correspondência, pode ser um problema do Active Directory.

Em alguns casos, esse problema pode ocorrer no SQL Server. Verifique os logs nessa máquina também.

Source: NETLOGON
Date: <DateTime>
Event ID: 5719
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: SQLPROD01
Description:
This computer was not able to set up a secure session with a domain controller in domain CONTOSO due to the following: The remote procedure call was cancelled. This may lead to authentication problems. Make sure that this computer is connected to the network. If the problem persists, please contact your domain administrator.

No log de eventos de segurança, filtre a ID do evento 4625. Esse evento mostra informações detalhadas sobre a falha de logon.

Coletar e examinar o buffer de anéis de conectividade SQL

O buffer de anéis é um log histórico de eventos de conexão no SQL Server, o que significa que ele pode ser usado após uma interrupção. Muitos eventos incluem temporizadores de login que informam onde o tempo é gasto:

  • O tempo gasto na rede indica uma possível latência de rede ou cliente.
  • O tempo gasto nas APIs SSL (Secure Sockets Layer) ou SSPI (Security Support Provider Interface) indica possíveis problemas com o subsistema de segurança do Windows.
  • O tempo enfileirado indica um problema de desempenho do SQL Server.

Para obter mais informações, consulte Coletar o buffer de anel de conectividade.

Pool de conexões

A falta de pool de conexões pode resultar em falhas de login intermitentes.

Observação

A falta de pool de conexões mostrará um grande número de códigos de TIME_WAIT status na saída em comparação com as NETSTAT conexões estabelecidas.

Se o pool de conexões não estiver habilitado, o cliente poderá ficar sem portas de saída e também sobrecarregar o servidor. Essa sobrecarga pode fazer com que o servidor rejeite solicitações de conexão de entrada ou inunde um controlador de domínio com baixo desempenho.

A melhor coisa a fazer é fazer com que o desenvolvedor do aplicativo use o pool de conexões em seus aplicativos. O pool de conexões está ATIVADO por padrão em aplicativos .NET e IIS (Serviços de Informações da Internet), mas pode ter sido desativado por algum motivo.

É altamente desencorajado que os aplicativos usem código de pool personalizado. Quase todas as implementações de pool personalizadas que encontramos tiveram problemas. É melhor usar o mecanismo de pool de conexões integrado.

Ficar sem portas efêmeras é uma causa relativamente comum de tempos limite de conexão intermitente.

Problema: pouca memória do kernel no computador do SQL Server.

Solução: ajuste a memória máxima do servidor (MB) no painel Propriedades do SQL Server Management Studio. É melhor definir a memória máxima do servidor (MB) para cerca de 4 GB a 8 GB a menos do que a memória física na máquina. Esse valor deve ser menor se houver várias instâncias, IIS ou alguns outros servidores de aplicativos em execução no computador. Para obter recomendações sobre a configuração de memória máxima do servidor (MB), consulte Opções de configuração de memória do servidor.

Observação

O valor padrão é 2147483647 MB, o que significa que o servidor pode fazer com que o sistema operacional (SO) fique sem memória.