我正在尝试使用正在设置链接服务器的服务器上的本地 Windows 主机文件在 SQL Server 2017 中设置链接服务器。这样做的原因是允许我对链接服务器名称进行硬编码,但通过更改本地主机文件来配置它指向的服务器。
我在两个数据库服务器上都使用 Windows 身份验证。我可以访问两者。
当我创建一个引用 IP 地址的链接服务器时,它可以工作。我可以连接和查询示例表。
EXEC sp_addlinkedserver @server = '192.168.1.109'
, @srvproduct = 'SQL Server'
当我将以下行添加到主机文件时,上面创建的通过 IP 地址连接的链接服务器不再工作。
192.168.1.109 主机文件测试
我收到以下错误:
Msg 18456, Level 14, State 1, Line 18
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
通常我会认为这与缺少 SPN 有关,但在这种情况下,两台服务器都设置了 SPN,如果我再次从主机文件中删除上述行,我可以连接。
此外,如果我尝试使用主机文件中的名称设置另一个链接服务器,就像这样,它也会失败,并出现同样的错误。
EXEC sp_addlinkedserver @server = 'hostsfiletest'
, @srvproduct = 'SQL Server'
我不确定我哪里出错了。
我可以从我正在设置链接服务器的服务器 ping 目标服务器,并且我可以使用 hostsfiletest 作为实例名称从同一台服务器连接到目标 SQL 实例,因此主机文件中的行显然在做某事。当我从主机文件中删除该行时,我无法使用 hostsfiletest 作为实例名称进行连接。
作为另一个测试,当我将与上面相同的行放入笔记本电脑的本地主机文件时,我能够使用 hostsfiletest 作为服务器名称连接到 SSMS 中的目标服务器。
如有任何帮助,我将不胜感激。如果有更简单的方法来设置指向可配置位置的链接服务器,我也愿意接受其他实现相同目标的方法。
是的。Kerberos SPN 取决于您用于连接的主机名。如果您连接到名为
SomeServer.foo.bar
服务帐户的主机,则在运行远程 SQL Server 时必须具有用于MSSQLSvc\SomeServer.foo.bar
. 这与以下场景基本相同:如何为 SQL Server 实例添加主机名别名您可以更新您使用的OleDb 提供程序,并同时将链接服务器名称与 SQL Server 名称分离,如下所示: