使用者“NT AUTHORITYANONYMOUS LOGIN”登錄失敗
我的 SQL Server 實例面臨一個非常具體的問題。最近,我不得不在我的伺服器 A 中創建一個連結伺服器(引用伺服器 B),以通過 A 連接到 B 中的數據庫。當我在伺服器 A 中(通過遠端桌面訪問)時,一切正常並且執行良好。
我需要通過 Apache 應用程序查詢伺服器 A,它總是有效的。但是當我使用 Apache 通過 A 查詢伺服器 B 時(不在遠端桌面中,它可以工作),查詢失敗,所以我打開 SSMS 並執行相同的查詢,它返回以下錯誤:
使用者“NT AUTHORITY\ANONYMOUS LOGIN”登錄失敗
我真正擔心的是這不是身份驗證錯誤(即使消息說),因為當我通過 RD 訪問伺服器 A 時,執行查詢並返回到 Apache 應用程序,然後我可以查詢,這使得完全沒有意義。
看起來這是一個間歇性問題,有時我無法強迫它。
您的兩台伺服器可能沒有正確設置SPN或Kerberos 委派,這通常是導致此類錯誤和您提到的症狀的兩個根本因素。如果連結伺服器對像在直接從
ServerA
to查詢時工作,ServerB
但在從第三台電腦查詢時返回錯誤“使用者 ‘NT AUTHORITY\ANONYMOUS LOGIN’ 登錄失敗”,這通常是雙跳問題的標誌,因為其中一個上述根本原因。請查看我對最近在此處發布的同類問題的回答,這是一個 Kerberos 問題。另請參閱我的相關問題,其中我自己也展示了 Kerberos 問題。在發布的每個答案中,有大量關於解決這些問題的資訊。
當不想處理 Kerberos 身份驗證時,此問題的一種解決方法是設置您的連結伺服器以使用專用 SQL 登錄,如我的連結 DBA.StackExchange 答案中所述:
或者,如果您將其更改為“使用此安全上下文進行”並輸入有權訪問 server 的 SQL 登錄(而不是 Windows 身份驗證登錄)的憑據
A
,那麼這也可以解決您的問題。因為現在,它不再嘗試傳遞目前經過身份驗證的使用者的安全上下文,而是使用指定的 SQL 登錄之一。從安全形度來看,這使其不再是雙跳。該解決方案的缺點是您必須確保您選擇的 SQL 登錄在
A
支持連結伺服器的所有案例的伺服器上具有適當的訪問權限。使用該連結伺服器的任何人現在都將A
作為您在連結伺服器對像中輸入憑據的 SQL 登錄名訪問伺服器。您必須小心在伺服器上的 SQL 登錄權限的過度和不足之間劃清界限A
。
這首先是一個與委託相關的問題,因為它需要在典型 Kerberos 之外進行額外設置(這往往會自動發生,因為 SPN 在啟動/關閉時註冊/註銷)連接,但這並不意味著您沒有相關問題到 Kerberos 也是如此,但只有當你來到它時才能越過那座橋。
請注意,可以在他們的環境中使用許多不同類型的委派,因此我將向您指出我對另一個 dba.se 問題的回答,其中概述了這些委派是什麼、如何正確配置它們以及一些陷阱與每個相關聯。雖然該問題與連結伺服器有關,但該答案中概述的委派方法與您在此處所需的方法相同。如果您有任何問題,請發表評論。