SQL Server - 链接服务器,查询一种方式很好,但另一种方式?

时间:2010-12-09 15:54:32

标签: sql-server tsql

我有两个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,但是当通信方式正常时,我想避免一个错综复杂的过程。

4 个答案:

答案 0 :(得分:2)

在SQL Management Studio中,查看从服务器B到服务器A的链接服务器的属性。可以从那里查看安全“选项卡”。这将告诉您从B到A的连接正在使用的安全上下文。当您没有为链接服务器设置有效的安全上下文时,通常会发生错误。

它可以从A到B而不是B到A工作的原因是你需要在每一侧正确设置链接服务器。只是为一个人做这件事并不是双向的。

答案 1 :(得分:2)

我已按照以下流程解决了这个问题:

  1. 删除了两个链接服务器。
  2. 从ServerA RDP(SSMS)为ServerA执行sp_addlinkedserver,从ServerB RDP(SSMS)为ServerB执行。
  3. 以前我只在一台服务器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。

看看:

http://support.microsoft.com/kb/238477