SQL Server Cannot Generate SSPI & 目標主體名稱不正確。無法產生 SSPI 內容

2022-05-03

筆記 SQL Server 「目標主體名稱不正確。無法產生 SSPI 內容。」 的處理可能方式之一 😎

How to deal with "Cannot generate SSPI context", one of possible solutions.

SQL Server Logo

說明

「目標主體名稱不正確。無法產生 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 內容」錯誤

設定 Windows 服務帳戶與權限

SQL Server 啟動帳號最佳實踐與最小化權限設定

相關連結

SQL Server Integrated Service 初探

SQL Server 閃電般快速查詢指南⚡

SQL Server 周邊工具彙整筆記

SQL Server 學習資源筆記