我有3台机器参与运行SQL脚本:
由于OLTPBox是一个不稳定的testing环境(定期拆除并重build),我们需要在该环境之外尽可能地做更多的工作。 所以我有一个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上运行的上下文作为DBO存在于所有适当的数据库和所有3台服务器上,所以我不确定为什么它在尝试使用链接服务器时丢失上下文。 所有这三台机器都在同一个域中,实际上甚至在同一个子网中(因此它们使用相同的DC进行authentication)。
这里发生了什么,为什么login上下文丢失?
确保你在涉及的所有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表来检查它是否正常工作。 在auth_scheme下查找Kerberos 。 如果不尝试重新启动连接到SQL的服务,可能需要几分钟的时间才能启动。