AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 118771
Accepted
Steve Mangiameli
Steve Mangiameli
Asked: 2015-10-22 07:54:16 +0800 CST2015-10-22 07:54:16 +0800 CST 2015-10-22 07:54:16 +0800 CST

Falha de login para o usuário 'NT AUTHORITY\ANONYMOUS LOGON'

  • 772

Eu tenho um servidor de operações executando o back-end do Windows Server 2012R2 e do SQL Server 2014 Enterprise. Este servidor é usado para implantar o novo código em outros servidores de produção por meio do arquivo cmd chamado por um SQL Agent Job. Todos os servidores estão no mesmo domínio.

O servidor A executa o back-end Windows Server 2008R2 e SQL Server 2008R2. Este servidor possui um servidor vinculado conectando-se a um banco de dados no Servidor B, executando o mesmo sistema operacional e a mesma versão do SQL Server que A. O servidor vinculado é configurado com a opção @useself=TRUE.

  • Todos os três servidores usam uma conta de serviço habilitada para delegação.
  • Essa conta de serviço tem privilégios sa em todas as três instâncias do SQL Server.
  • Todos os três servidores têm SPNs configurados com essa conta e são delegados para usar Kerberos para os serviços MSSQLSVC associados.

Posso executar o seguinte em cada um e "Kerberos" é retornado

    SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid

Além disso, posso fazer telnet, ping etc. de qualquer um desses servidores para qualquer outro servidor sem problemas - tudo está conectado. As implantações de código nunca tiveram problemas e o servidor vinculado é referenciado com frequência e sem problemas ... exceto por um cenário e não entendo o porquê.

Cenário de salto duplo

  1. Um trabalho do SQL Agent no servidor de Operações é executado ad hoc por qualquer administrador de sistema que não seja a conta de serviço do SQL Agent e executa um arquivo cmd, também no servidor de Operações.
  2. O trabalho do SQL Agent é configurado para "Executar como" uma conta de serviço do SQL Agent, com privilégios sa.
  3. O código implantado vem de um arquivo .sql no servidor de operações.
  4. O arquivo cmd chama o SQLCMD para executar o código no arquivo .sql no Servidor A.
  5. O código no arquivo .sql faz referência ao servidor vinculado e falha com erro

    *Msg 18456, Nível 14, Estado 1, Servidor ServidorB, Linha 1 Login falhou para o usuário 'NT AUTHORITY\ANONYMOUS LOGON'. * .

O erro é direcionado ao servidor vinculado - Servidor B. Se eu executar esse código manualmente, usando o SQLCMD, do servidor de Operações no Servidor A, ele rodará bem. Se eu fizer logon em uma caixa como a conta de serviço do SQL Agent e executar o trabalho do SQL Agent, ele funcionará bem. É somente quando o trabalho do SQL Agent é executado por alguém que não seja a conta de serviço do SQL Agent que recebo o erro.

Eu li tantos posts e blogs e artigos do MSDN sobre Kerberos, double hop, etc, me dizendo para fazer o que já foi feito. o que estou perdendo?

Informações Adicionais Finalmente consegui voltar a isso e localizei algumas informações adicionais. Seguindo o conselho de Bogdan, executei o Process Explorer e verifiquei se as credenciais para o primeiro salto são da conta do SQL Agent Service conforme o esperado e se o TCP está sendo usado. Infelizmente, essas são todas as informações úteis que consegui obter da ferramenta.

Eu vasculhei os logs do aplicativo do Windows e procurei informações de login para as diferentes instâncias nas máquinas e notei que o Kerberos nem está sendo usado !!! Em vez disso, o NTLM está sendo usado.

Portanto, esse é o novo caminho que estou seguindo - por que a autenticação NTLM está sendo usada, quando o Kerberos está configurado e os FQDN SDNs adequados existem por porta e instância? Preciso especificar de alguma forma o tipo de autenticação no arquivo cmd ou na chamada SQLCMD? Ou eu tenho algo mal configurado que não estou pensando?

O mistério se aprofunda A chamada SQLCMD referenciou o servidor "primeiro salto" via Alias. Modifiquei a referência do servidor SQLCMD para a instância nomeada real e executei novamente o trabalho. Funcionou! Também usamos cNames para nossas máquinas e instâncias SQL, então tentei usar isso. Também funcionou! Para sorrisos e gargalhadas, tentei novamente o pseudônimo ... funcionou ??? Eu vou verificar os logs de aplicativos do Windows para cada um deles e ainda está relatando a autenticação como NTLM!

Estou completamente perplexo neste ponto e sem saber como explicar esse comportamento para consertar o resto do nosso ambiente.

sql-server kerberos
  • 2 2 respostas
  • 7439 Views

2 respostas

  • Voted
  1. Best Answer
    Steve Mangiameli
    2016-02-11T10:42:08+08:002016-02-11T10:42:08+08:00

    Finalmente descobri isso!

    Fazemos referência a muitos de nossos SQL Servers e instâncias muito ativos com aliases SQL e nomes canônicos. Isso nos permite realizar atualizações paralelas e alternar entre máquinas sem interrupção do código. Os aliases SQL são todos configurados para fazer referência aos nomes canônicos pelo mesmo motivo. Os SPNs padrão que registramos são para os nomes das máquinas.

    EXEMPLO SQL Server SSxyz\xyzInstance escutando na porta 12345 registrou SPNs:

    • MSSQLSVC/SSxyz.mydomain.com:12345
    • MSSQLSVC/SSxyz:12345
    • MSSQLSVC/SSxyz:xyzInstance

    Todos eles são registrados na conta de serviço proprietária do MSSQLSVC nessa máquina e a delegação é definida para que cada um passe as credenciais.

    O servidor e a instância também têm o nome canônico cxyz\xyzInstance. Finalmente, o SQL Server tem um alias de 32 bits e 64 bits de xyzAlias, apontando para o nome canônico cxyz\xyzInstance.

    Durante um cenário de salto duplo do meu pc local para xyzAlias ​​para abcAlias, a autenticação Kerberos falha e volta para NTLM porque o alias e o SPN não podem ser resolvidos. É por isso que os logs estavam mostrando NTLM.

    A correção foi adicionar mais alguns SPNs para registrar o nome canônico do servidor no nome real. Em seguida, o serviço SQL é registrado com outro SPN. assim:

    • setspn -s host/cxyz SSxyz
    • setspn -s host/cxyz.meudominio.com SSxyz
    • setspn -s MSSQLSVC/cxyz:12345 sqlserviceaccountname
    • setspn -s MSSQLSVC/cxyz:xyzInstance sqlserviceaccountname

    Depois de registrado, cada SPN é configurado para delegação. Eles aparecem como SPNs exclusivos e permitem que o alias SQL seja resolvido para o nome real da máquina. A autenticação de salto duplo registrada é Kerberos e todos estão felizes! Exceto os caras do AD... eles terão muitos SPNs para registrar em algumas horas.

    • 3
  2. bogdan
    2015-10-22T11:33:57+08:002015-10-22T11:33:57+08:00

    Xcopy Process Explorer em seu servidor de operações.

    Modifique o arquivo CMD invocado pelo SQL Server Agent para chamar timeout 600logo antes da chamada sqlcmd.exe com falha. Isso introduzirá um atraso de 10 minutos antes de o sqlcmd ser realmente chamado.

    Execute o trabalho, primeiro como você sabe que funciona. Vá para o Process Explorer e inspecione a guia Propriedades para o processo cmd.exe correspondente (será aquele que chama timeout.exe). Faça uma captura de tela da guia Segurança, ela durará mais.

    Execute o trabalho como você sabe que falha. Verifique a guia Segurança e compare com o caso anterior.

    O contexto de segurança usado pelo sqlcmd.exe é aquele herdado do cmd.exe, que é criado pelo SQLAGENT.EXE. Você deve notar uma diferença entre os contextos de segurança criados nos 2 casos e isso levará à solução.

    • 0

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve