Usando servidores SQL vinculados de um servidor diferente

1

Eu tenho 3 máquinas envolvidas na execução de um script SQL:

  1. JumpBox - Uma máquina que serve como um ponto estável para a automação ser executada.
  2. ReportBox - Uma máquina que contém bancos de dados e lógica de relatórios. Executando o SQL Server 2008 R2
  3. OLTPBox - Uma máquina que contém um banco de dados OLTP. Executando o SQL Server 2014

Como o OLTPBox é um ambiente de teste instável (ele é demolido regularmente e reconstruído), precisamos trabalhar o máximo possível fora desse contexto. Então eu tenho um script SQL (chame de InsertScript.sql ) que basicamente faz o seguinte:

INSERT INTO testresults VALUES (SELECT * from OLTPBox.prod.dbo.results)

OLTPBox no script é um servidor vinculado.

O script acima é empacotado em uma chamada SQLCMD que é executada no JumpBox:

SQLCMD -i .\InsertScript.sql -S ReportBox -D Reporting

No entanto, quando eu executo isso, recebo o seguinte erro:

Msg 18456, Level 14, State 1, Server OLTPBox, Line 1 Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

O contexto que estou executando como no JumpBox existe como um DBO para todos os bancos de dados apropriados, e todos os 3 dos servidores, por isso não sei por que está perdendo o contexto ao tentar usar o Servidor Vinculado. Todas as três máquinas estão no mesmo domínio e, na verdade, estão na mesma sub-rede (então, elas se autenticam usando o mesmo DC).

O que está acontecendo aqui, por que o contexto de login está sendo perdido?

    
por Sean Long 21.07.2015 / 16:40

1 resposta

0

Certifique-se de definir seus SPNs em todos os SQL Servers envolvidos.

Geralmente faço o seguinte:

setspn –A MSSQLSvc/myservername.fqdn:instancename DOMAIN\SQLServiceAccount
setspn –A MSSQLSvc/myservername.fqdn:port DOMAIN\SQLServiceAccount
setspn –A MSSQLSvc/myservername:instancename DOMAIN\SQLServiceAccount
setspn –A MSSQLSvc/myservername:port DOMAIN\SQLServiceAccount

Isso deve capturar a maioria das maneiras possíveis de se conectar

Você pode verificar se está funcionando observando a tabela sys.dm_exec_connections . Procure por Kerberos em auth_scheme . Pode demorar alguns minutos para começar, se não tentar reiniciar os serviços que se conectam ao seu SQL.

    
por 12.09.2015 / 23:44