使用来自不同服务器的链接 SQL 服务器

使用来自不同服务器的链接 SQL 服务器

我有 3 台机器参与运行 SQL 脚本:

  1. JumpBox——一种作为自动化运行稳定点的机器。
  2. ReportBox - 保存报告数据库和逻辑的机器。运行 SQL Server 2008 R2
  3. OLTPBox - 包含 OLTP 数据库的机器。运行 SQL Server 2014

由于 OLTPBox 是一个不稳定的测试环境(它会定期被拆除并重建),因此我们需要在该环境之外做尽可能多的工作。因此,我有一个 SQL 脚本(称之为InsertScript.sql),它基本上执行以下操作:

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

脚本中的 OLTPBox 是一个链接服务器。

上述脚本包装在 JumpBox 上运行的 SQLCMD 调用中:

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

但是当我运行它时,出现以下错误:

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

我在 JumpBox 上运行的上下文作为所有相应数据库和所有 3 台服务器的 DBO 存在,因此我不确定为什么在尝试使用链接服务器时会丢失上下文。这三台机器都在同一个域中,实际上甚至在同一个子网中(因此它们使用同一个 DC 进行身份验证)。

这是怎么回事?为什么登录上下文丢失了?

答案1

确保在所有涉及的 SQL Server 上设置了 SPN。

我通常会做以下事情:

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

这应该可以捕捉到大多数可能的连接方式

您可以通过查看表格来检查它是否正常工作sys.dm_exec_connections。查找Kerberos下面的auth_scheme。它可能需要几分钟才能启动,如果没有,请尝试重新启动连接到 SQL 的服务。

相关内容