2010-12-09 20 views
1

我有兩臺SQL Server,它們分別使用ServerA的sp_addlinkedserver 'ServerB\Instance'和ServerB的sp_addlinkedserver 'ServerA\Instance'SQL Server - 鏈接服務器,查詢一種方式很好,但其他?

如果我執行下面的查詢從服務器A,然後一切都沒問題:

SELECT * 
FROM [ServerB\Instance].Database.dbo.Table 

如果我從服務器B執行以下查詢時發生錯誤:

SELECT * 
FROM [ServerA\Instance].Database.dbo.Table 

錯誤:

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

SQL Server在ServerA和ServerB上運行的服務帳戶已被提升爲p兩個服務器上的錯誤都試圖解決問題,但沒有成功。

我已經完成了research但是想要避免一個通道單向的錯綜複雜的過程。

回答

1

我已經通過以下過程解決了這個:

  1. 刪除這兩個鏈接的服務器。
  2. 從ServerA RDP(SSMS)爲ServerA執行sp_addlinkedserver,並從ServerB RDP(SSMS)執行ServerB的sp_addlinkedserver。

此前,我只對一臺服務器RDP(SSMS)會話中的兩臺服務器執行了sp_addlinkedserver。從每臺服務器執行已解決該問題。如果有人可以添加評論爲什麼這是我會非常感激。

+0

@Charles Boyung的回答是正確的 – tomfanning 2012-03-15 21:14:01

2

在SQL Management Studio中,查看從服務器B到服務器A的鏈接服務器的屬性。您可以從中查看安全「選項卡」。這會告訴你從B到A的連接正在使用的安全上下文。當您沒有爲鏈接服務器設置有效的安全上下文時,通常會出現錯誤。

它可以從A工作到B而不是B工作到A的原因是您需要在每一邊正確設置鏈接服務器。只是爲了一個人而做不到這兩種方式。

0

要解決此問題,請使用下列方法之一:

  • 服務器A上的客戶端映射到一個標準的安全登錄 待辦事項可以通過調用sp_addremotelogin()作爲解釋在這裏做到這一點在服務器B上,通過使用企業管理器中的鏈接服務器屬性對話框的sp_addlinkedsrvlogin存儲過程或安全性選項卡。

  • 如果您在基於Microsoft Windows 2000的計算機上運行的SQL Server實例上運行分佈式查詢,請配置SQL Server以通過使用命名管道服務器網絡庫來偵聽客戶端請求,而不是使用TCP/IP服務器網絡庫或Multiprotocol Server網絡庫。要爲SQL Server配置服務器網絡庫,請使用服務器網絡實用程序。

在看看:

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

相關問題