Sql-Server

密碼輪換期間 gMSA 帳戶身份驗證失敗

  • March 17, 2022

當我們的 gMSA 帳戶自動輪換時,我們會看到登錄失敗大約 1-10 分鐘。這對於連接到 MS SQL 伺服器的 gMSA 客戶端帳戶尤其明顯,但我認為其他 gMSA 帳戶也會發生這種情況。MS SQL 伺服器沒有作為 gMSA 帳戶執行,但我們的應用程序使用 gMSA 與 SQL 建立客戶端連接。預設情況下 ManagedPasswordIntervalInDays 是每 30 天一次,所以我們每個月都會同時看到這個。

當我檢查域控制器日誌時,我沒有看到 gMSA 使用者的任何登錄失敗,但是 SQL 伺服器記錄了以下錯誤

SSPI 握手失敗,錯誤程式碼為 0x8009030c,狀態 14,同時建立具有集成安全性的連接;連接已關閉。原因:AcceptSecurityContext 失敗。作業系統錯誤程式碼指示失敗的原因。登錄嘗試失敗

$$ CLIENT: x.x.x.x $$

根據我的發現,此錯誤通常表示錯誤的使用者名/密碼組合。

這發生在多個客戶端上,每個客戶端最終都會在 1-10 分鐘後再次開始連接。客戶端並非都同時開始連接,但它似乎在那個時間視窗內是隨機的。

最初我認為可能與更改密碼的 AD 複製有關,因此我們將預設的站點間複製間隔修改為 USE_NOTIFY 以立即複製。如果複製是問題,我希望看到 DC 上的登錄失敗,而我沒有看到 DC 上的登錄失敗。我還認為也許 SQL 伺服器正在記憶體身份驗證令牌,但如果是這種情況,我希望看到所有客戶端同時解析(即當 SQL 伺服器刷新時)因為客戶端每個都重新開始工作在不同的時間,它似乎不在 SQL 伺服器端,但更可能在客戶端。可能記憶體 gMSA 密碼,或者可能與超時和重試相關的內容。

由於 SPN 問題導致 gMSA 通過 NTLM 而不是 Kerberos 向 sql server 進行身份驗證,我們生成了相同的錯誤。如果您登錄到 sql server 並通過檢查會話,sys.dm_exec_connections您應該會看到與 NTLM 的會話列表

NTLM 會話

(您也可以klist sessions從 cli 中使用來查看會話)

我們能夠使用日誌分析工具將我們的錯誤與密碼更改相關聯,因此我們知道這是罪魁禍首。我不知道 SCM 多久刷新一次密碼副本,但如果服務正在對 sql server 進行身份驗證並使用 Kerberos,我相信密碼更改應該獨立於 Kerberos 會話生存期/更新,因此生成的錯誤是一個可靠的線索密碼正在通過 NTLM 發送到 sql server 主機。一旦我們解決了我們的 SPN 問題(這是由於額外的 DNS A 記錄),會話就會切換到 Kerberos 身份驗證。

引用自:https://serverfault.com/questions/1046338