我有两个SQL Server,它们使用来自ServerA的sp_addlinkedserver 'ServerB\Instance'
和来自ServerB的sp_addlinkedserver 'ServerA\Instance'
进行链接。
如果我从ServerA执行以下查询,那么一切正常:
SELECT *
FROM [ServerB\Instance].Database.dbo.Table
如果我从ServerB执行以下查询,则会发生错误:
SELECT *
FROM [ServerA\Instance].Database.dbo.Table
错误:
Ms 18456,Level 14,State 1,Line 1 用户'NT登录失败 AUTHORITY \ ANONYMOUS LOGON'。
SQL Server在ServerA和ServerB上运行的服务帐户在两台服务器上都获得了提升权限,试图解决问题,但没有成功。
我已经完成了research,但是当通信方式正常时,我想避免一个错综复杂的过程。
答案 0 :(得分:2)
在SQL Management Studio中,查看从服务器B到服务器A的链接服务器的属性。可以从那里查看安全“选项卡”。这将告诉您从B到A的连接正在使用的安全上下文。当您没有为链接服务器设置有效的安全上下文时,通常会发生错误。
它可以从A到B而不是B到A工作的原因是你需要在每一侧正确设置链接服务器。只是为一个人做这件事并不是双向的。
答案 1 :(得分:2)
我已按照以下流程解决了这个问题:
以前我只在一台服务器RDP(SSMS)会话中为两台服务器执行了sp_addlinkedserver。从每个服务器执行已经解决了问题。如果有人可以添加评论,为什么会这样,那么我将非常感激。
答案 2 :(得分:0)
您必须将本地用户映射到另一台服务器上的远程用户。 可以通过调用sp_addremotelogin()来执行此操作,如下所述:http://msdn.microsoft.com/en-us/library/ms186338.aspx
答案 3 :(得分:0)
要解决此问题,请使用以下方法之一:
使用sp_addlinkedsrvlogin存储过程或企业管理器中“链接服务器属性”对话框的“安全”选项卡,将服务器A上的客户端映射到服务器B上的标准安全登录。
如果在基于Microsoft Windows 2000的计算机上运行的SQL Server实例上运行分布式查询,请将SQL Server配置为使用命名管道服务器网络库侦听客户端请求,而不是使用TCP / IP Server网络库或Multiprotocol Server网络库。要为SQL Server配置Server网络库,请使用Server Network Utility。
看看: