間歇性 SQL 委託身份驗證錯誤
這是一個奇怪的問題,導致我失去了所有的頭髮。
每隔幾天左右,我們從一台 SQL 伺服器到另一台 SQL 伺服器的委託身份驗證失敗並出現以下錯誤:
使用者“NT AUTHORITY\ANONYMOUS LOGON”登錄失敗。SQL 伺服器日誌顯示:“使用者 ‘NT AUTHORITY\ANONYMOUS LOGON’ 登錄失敗。原因:找不到與提供的名稱匹配的登錄名。
$$ CLIENT: 10.1.x.x $$錯誤:18456,嚴重性:14,狀態:5。”
我們的環境由 6 個域控制器組成,範圍從 Windows 2012 到 Windows 2019,SQL 伺服器是執行 SQL Server 2017 的 Windows Server 2016。
幾個小時後,問題會自行消失,除非在任一受影響的 SQL 伺服器上清除 Kerberos 票證,從而在大約 15 分鐘內解決問題。
起初我們認為這是特定 SQL 伺服器的問題,因此我們更換了它,但在過去一年中,它影響了具有多個不同委派連接的多台伺服器。
迄今為止,我們已嘗試更新 SQL 伺服器、刪除和重新創建 SPN、將我們的大部分 DC 升級到 Windows 2019、更新域功能級別以及多個 Microsoft 票證。我們懷疑將 SSMS 會話留給 SQL Server 會導致 Kerberos 委託連接更頻繁地失敗,但這可能是一種迷信。
有任何想法嗎?它在 80% 的時間裡都有效,這使得追捕變得特別棘手。域控制器似乎正在正常同步,但我不確定在 DC 出現問題的情況下要尋找什麼。
奇怪的是,我們能夠在中斷期間通過受保護的 AD 帳戶連接到各個伺服器,並且登錄被列為 Kerberos,只是 AD 委派的權限停止工作。
我們在周末進行 DC 維護,問題似乎在任何一天的任何時間都會出現。
如果您的 SQL Server 是集群的,並且它們的服務帳戶被配置為允許它們管理自己的服務主體名稱,那麼您可能會遇到一個已知問題。
在物理上相距較遠的域控制器的環境中,計劃的故障轉移事件可能會導致雙躍點身份驗證的 Kerberos 委派失敗,並出現與您問題中的錯誤消息相匹配的症狀。
當 SQL Server 關閉時,SQL Server 服務會嘗試向域控制器註銷 Kerberos SPN。然後發生群集故障轉移,並在其他節點之一上啟動 SQL Server 服務。這可能發生得很快,以至於組織中的其他域控制器尚未收到用於刪除 SPN 的同步。此時,SQL Server 將嘗試註冊 SPN,但由於尚未在所有域控制器上刪除它,因此無法註冊。因此,註冊 SPN 的嘗試失敗。SQL Server 正常啟動,通過 NTLM 接受身份驗證請求,除非有人嘗試雙跳身份驗證,否則沒有人更明智。
除了在 Active Directory 域中創建永久 SPN 條目並阻止 SQL Server 自動管理它們之外,沒有很好的解決方案。
您的問題是否恰好與域控制器維護相吻合?在我的組織中,我們遇到了這個問題,並開始在維護之前主動更改我們的身份驗證伺服器,以避免票證過期。我們在serverfault上的朋友向我們介紹了這個解決方案。