O aplicativo da Web executado como o NETWORK SERVICE pode se conectar ao SQL Server, mas o serviço do Windows em execução como SISTEMA LOCAL não pode

4

Instalei um aplicativo da Web .net em um servidor IIS do Windows Server 2003, executando em um pool de aplicativos como NETWORK SERVICE e conectando-me ao SQL Server em uma máquina diferente usando a Segurança Integrada. A máquina do SQL Server também está executando o Windows Server 2003. Portanto, o aplicativo da Web se conecta como identidade DOMAIN\COMPUTER$ e essa conta tem um login & usuário no SQL Server, então tudo funciona bem.

Eu também instalei um serviço windows .net no mesmo servidor IIS que se conecta à mesma máquina do SQL Server. O serviço do Windows é executado como LOCAL SYSTEM e, portanto, também deve se conectar como identidade DOMAIN\COMPUTER$ . Eu instalei esse mesmo produto em mais de uma dúzia de empresas diferentes, normalmente tudo funciona como eu esperaria, mas em um caso recente, o serviço do Windows não conseguiu se conectar ao banco de dados, recebendo o erro:

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

Alguma idéia de por que isso seria o caso do SISTEMA LOCAL e não do SERVIÇO DE REDE? Para contornar isso no curto prazo, tive que alternar para usar um logon do SQL Server, mas preferiria usar o Integrated Security se houvesse uma solução fácil para ele. Não havia mensagens de erro no log de eventos do Sistema ou Segurança, embora eu não tenha feito nada para ativar o log adicional.

Normalmente, suponho que isso seja algum tipo de problema do tipo Kerberos / AD e siga artigos como isso e isso ajudaria. Mas o fato de funcionar no NETWORK SERVICE sugere que as coisas normais que eu verificaria já estão corretas (por exemplo, os SPNs foram configurados corretamente e a conta de domínio da máquina está habilitada para delegação?). Então, qual configuração está dando errado?

Eu não tenho acesso aos servidores sem a ajuda da equipe de TI do meu cliente e há outros aplicativos instalados no servidor que eu preciso estar atento para não interromper, o que torna a solução de problemas um pouco mais delicada. Todas as sugestões para solução de problemas são muito apreciadas!

    
por Rory 08.09.2013 / 19:05

2 respostas

3

Você pode querer confirmar se a conexão de segurança é NTLM ou Kerberos. Se estiver revertendo para o NTLM, a conexão será anônima.

Existe uma política de grupo que permite usar a identidade do computador quando o NTLM é usado.

Segurança de rede: permita que o sistema local use a identidade do computador para NTLM
link

Para obter mais informações sobre como configurar o SPN para facilitar a autenticação Kerberos no seu servidor SQL:

link

Em particular, observe o seguinte:

Um SPN para o SQL Server é composto pelos seguintes elementos:

  • ServiceClass: identifica a classe geral de serviço. Isso é sempre MSSQLSvc para o SQL Server.
  • Host: esse é o nome de domínio totalmente qualificado DNS do computador que está executando o SQL Server.
  • Porta: este é o número da porta na qual o serviço está escutando.

    por exemplo: MSSQLSvc / myserver.corp.mycomany.com: 1433

por 08.09.2013 / 19:31
2

Ainda estou apostando no problema do SPN. Não apenas assuma que eles estão lá. Verifique o registro adequado de SPNs para o SQL Server. Também verifique se há duplicatas ( setspn -x ).

Network Service funciona porque quando o SPN não existe, ele ainda pode voltar para a autenticação NTLM.

Local System não funciona porque só acessa recursos de rede como DOMAIN\Computer$ se for capaz de usar o Kerberos. Caso contrário, ele retorna a uma sessão nula, e é por isso que você vê Anonymous Logon .

    
por 08.09.2013 / 19:36