SQL Server Cannot Generate SSPI & 目標主體名稱不正確。無法產生 SSPI 內容
2022-05-03
筆記 SQL Server 「目標主體名稱不正確。無法產生 SSPI 內容。」 的處理可能方式之一 😎
How to deal with "Cannot generate SSPI context", one of possible solutions.
說明
「目標主體名稱不正確。無法產生 SSPI 內容。」"Cannot generate SSPI context",這個錯誤訊息在網路上也許多的處理討論,包含保哥所分享的 VPN 連線後 SQL Server 發生「無法產生 SSPI 內容」錯誤 以及在 SQL PASS Taiwan 社群的 討論。
但對於這個錯誤,大家的情境不同,處理方式也不同。唯一能夠確定的是這個錯誤是發生在與 SQL Server 資料庫連線採用 Windows 驗證的方式,才會發生。而 Windows 驗證走的是 Kerberos 以及 NTLM 協定,所以問題也可能是發生在協定上。
錯誤來自加密協定
本次筆者所碰到的情境是資料庫伺服器原本正常,但在作業系統更新之後,從遠端使用 SSMS 連線資料庫,回報 「目標主體名稱不正確。無法產生 SSPI 內容。」的錯誤訊息。
參考微軟 "Cannot generate SSPI context" error when using Windows authentication to connect SQL Server 的處理指南,建議使用 Kerberos Configuration Manager 來釐清問題。
筆者首先使用 IIS Crypto 檢查目前伺服器支援的 Schannel,發現 Hashes 以及 Cipher Suites 都不是預期的組態,所以設定為 Best Practices 後重新啟動 Server,神奇的是資料庫伺服器就可以正常連線了。更神奇的是 Server Protocols、Ciphers、Hashes 在 Best Practices 後的設定,仍被伺服器的設定蓋掉,例如 Client Protocols 原本希望支援 TLS 1.0、Hashes 希望支援 MD5。只有 Cipher Suties 當中的設定有被保存。
但資料庫已經可以正常連線,不再回報 「目標主體名稱不正確。無法產生 SSPI 內容。」錯誤訊息 😮
錯誤來自 SPN 設定
2025 年,再次遇見相同「目標主體名稱不正確。無法產生 SSPI 內容。」的錯誤問題,本次解決的方式是透過 SPN 的註冊來解決。
原本的 SQL Server 服務從 NT Service\MSSQLSERVER
調整為網域帳號後就會出現 SSPI 的錯誤訊息,調整回去恢復。原因是來 SPN 錯誤所致。
可以透過微軟所提供的 SQLCHECK 工具來檢查 SPN 的設定。
SPN 是 Kerberos 協定的一部分,用來識別服務與執行服務的帳號,從而提供相關服務進行網域身分驗證。當 SPN 錯誤,就會導致使用 Windows 驗證方式的連線發生問題。如果是缺少 SPN 會改為使用 NTLM 進行驗證,而如果是 SPN 服務與帳號的不一致,就會發生 SSPI 的錯誤。
SPN 設定 | 本機連線 | 遠端連線 |
---|---|---|
服務與帳戶一致 | NTLM | Kerberos |
服務與帳戶不一致 | NTLM | 無法連線 |
缺少 SPN | NTLM | NTLM |
解決方法是使用 gMSA
帳號來自動註冊 SPN 以進行 Kerberos 驗證,或者是刪除服務與帳號不一致的 SPN 使用 NTLM 的方式驗證。
setspn -D MSSQLSvc/ServerName.fqdn:1433 hostname$
setspn -D MSSQLSvc/ServerName.fqdn hostname$
setspn -D MSSQLSvc/ServerName:1433 hostname$
setspn -D MSSQLSvc/ServerName hostname$
如果無法透過 gMSA
來自動註冊 SPN,也可以是刪除服務與帳號不一致的 SPN 後主動進行 SPN 註冊。
setspn -S MSSQLSvc/ServerName.fqdn:1433 domain\serviceaccount
setspn -S MSSQLSvc/ServerName.fqdn domain\serviceaccount
setspn -S MSSQLSvc/ServerName:1433 domain\serviceaccount
setspn -S MSSQLSvc/ServerName domain\serviceaccount
更多關於 SSPI 以及 SPN 可以參考 Windows SSPI And SPN 筆記
參考資料
使用 Windows 驗證連線至 SQL Server 時,發生「無法產生 SSPI 內容」錯誤