文章編號: 811889 - 上次校閱: 2011年9月17日 - 版次: 2.0 如何疑難排解「無法產生 SSPI 內容」錯誤訊息
在此頁中結論 本文將逐步告訴您,如何疑難排解最常見的「無法產生 SSPI 內容」錯誤訊息來源。在下列情況下,您可能會收到這個錯誤訊息:
瞭解 Kerberos 的術語和服務主要名稱用戶端電腦上的 SQL Server 驅動程式利用整合式安全性來使用使用者帳戶的 Windows 安全性權杖,以成功連線至執行 SQL Server 的電腦。用戶端將 Windows 安全性權杖委派給正在執行 SQL Server 的電腦。當使用者的安全性權杖使用下列其中一項設定委派給其他電腦時,SQL Server 驅動程式將執行此委派:
「無法產生 SSPI 內容」錯誤發生時機為 SSPI 使用 Kerberos 透過 TCP/IP 進行委派,但無法完成必要的作業以將使用者的安全性權杖成功地委派給執行 SQL Server 的目的電腦。 為何安全性支援提供者介面會選擇 NTLM 或 KerberosKerberos 使用名為「服務主要名稱 (SPN)」的識別項。考慮將 SPN 視為網路伺服器資源中某些執行個體唯一的網域或樹系識別項。您可以建立 Web 服務、SQL 服務或 SMTP 服務的 SPN。您也可以在同一部擁有唯一 SPN 的實體電腦上建立多個 Web 服務執行個體。SQL Server 的 SPN 是由下列項目所組成:
當用戶端的 SQL Server 驅動程式使用整合式安全性連線至 SQL Server,用戶端驅動程式的程式碼會嘗試解析執行 SQL Server 電腦的完整格式 DNS 網域名稱,方法是使用 WinSock 網路 API。為了執行這項作業,驅動程式的程式碼會呼叫 gethostbyname 及 gethostbyaddr WinSock API。即使 IP 位址或主機名稱通過執行 SQL Server 的電腦驗證,如果該電腦使用整合式安全性,SQL Server 驅動程式仍然會嘗試解析連線電腦的 DNS 完整格式。 用戶端的 SQL Server 驅動程式解析完執行 SQL Server 電腦的完整格式 DNS 網域名稱之後,相符的 DNS 會用於替這部電腦建立 SPN。因此,透過 WinSock 將 IP 位址或主機名稱解析為完整格式 DNS 網域名稱的任何相關問題,皆可能會導致 SQL Server 驅動程式在執行 SQL Server 的電腦上建立無效的 SPN。 解析後將導致用戶端 SQL Server 驅動程式 SPN 無效的完整格式 DNS 網域名稱如下:
讓 Kerberos 驗證成功的關鍵因素是網路上 DNS 功能有效。您可以在用戶端和伺服器上使用 Ping 命令列公用程式來檢查這項功能。在用戶端電腦上,執行下列指令以取得執行 SQL Server (此處執行 SQL Server 的電腦名稱為 SQLServer1) 的伺服器的 IP 位址: ping sqlserver1 若要查看 Ping 命令列公用程式是否解析了 SQLServer1 完整格式的 DNS,請執行下列指令:ping -a IPAddress 例如:C:\>ping SQLSERVER1 Pinging SQLSERVER1 [123.123.123.123] with 32 bytes of data: Reply from 123.123.123.123:bytes=32 time<10ms TTL=128 Reply from 123.123.123.123:bytes=32 time<10ms TTL=128 Reply from 123.123.123.123:bytes=32 time<10ms TTL=128 Reply from 123.123.123.123:bytes=32 time<10ms TTL=128 Ping statistics for 123.123.123.123:Packets:Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds:Minimum = 0ms, Maximum = 0ms, Average = 0ms C:\>ping -a 123.123.123.123 Pinging SQLSERVER1.northamerica.corp.mycompany.com [123.123.123.123] with 32 bytes of data: Reply from 123.123.123.123:bytes=32 time<10ms TTL=128 Reply from 123.123.123.123:bytes=32 time<10ms TTL=128 Reply from 123.123.123.123:bytes=32 time<10ms TTL=128 Reply from 123.123.123.123:bytes=32 time<10ms TTL=128 Ping statistics for 123.123.123.123:Packets:Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds:Minimum = 0ms, Maximum = 0ms, Average = 0ms C:\> 建立 SQL Server 服務主要名稱這是 Kerberos 和 SQL Server 互動中的部分關鍵。有了 SQL Server,您可使用下列其中一個項目執行 SQL Server 服務:LocalSystem 帳戶、本機使用者帳戶或網域使用者帳戶。當 SQL Server 服務執行個體啟動時,將嘗試呼叫 DsWriteAccountSpn API 於 Active Directory 中註冊自己的 SPN。如果呼叫不成功,事件檢視器會記錄下列警告:來源:MSSQLServer EventID:19011 描述:SuperSocket 資訊:(SPNRegister):錯誤 8344。 如需有關 DsWriteAccountSpn 功能的詳細資訊,請造訪下列 Microsoft 網站:http://msdn2.microsoft.com/en-us/library/ms676056.aspx
(http://msdn2.microsoft.com/en-us/library/ms676056.aspx)
簡化的說明如果您使用 LocalSystem 帳戶執行 SQL Server 服務,SPN 將自動註冊,且 Kerberos 將成功與執行 SQL Server 的電腦互動。然而,如果您使用網域帳戶或本機帳戶執行 SQL Server 服務,在大多數情況下嘗試建立 SPN 將會失敗,因為網域帳戶或本機帳戶沒有權限設定各自的 SPN。若 SPN 建立失敗,這表示執行 SQL Server 的電腦上未設定 SPN。如果您試著將網域系統管理員帳戶用於 SQL Server 服務帳戶,SPN 將成功建立,因為建立 SPN 時所需的網域系統管理員階層的憑證存在。您可能未使用網域系統管理員帳戶執行 SQL Server 服務 (為了避免安全性風險),執行 SQL Server 的電腦可能無法建立其 SPN。因此,如果將電腦連線至執行 SQL Server 的電腦時想要使用 Kerberos,您必須手動為執行 SQL Server 的電腦建立 SPN。如果您使用網域使用者帳戶或本機使用者帳戶執行 SQL Server,就必須按此方式操作。您建立的 SPN 必須指派給特定電腦上執行 SQL Server 服務所用的服務帳戶。除非執行 SQL Server 的電腦使用本機系統啟動,否則 SPN 無法指派給電腦容器。SPN 必須存在且必須是唯一的,系統還必須將其指派給適當的容器。一般來說,該容器是目前的 SQL Server 服務帳戶。然而,這是使用本機系統的電腦帳戶。 檢查網域檢查您登入的網域是否能與執行 SQL Server 的所屬電腦網域通訊。網域中也必須有適當的名稱解析。
如何設定 SQL Server 服務並為 SQL Server 執行個體動態建立 SPN若要設定 SQL Server 服務並動態建立 SPN,必須在 Active Directory 目錄服務中修改帳戶的存取控制設定。您必須授予 SQL Server 服務帳戶「讀取 servicePrincipalName」權限和「寫入 servicePrincipalName」的權限。警告如果您使用「Active Directory 服務介面 (ADSI) 編輯器」嵌入式管理單元、LDP 公用程式或任何其他 LDAP 第 3 版用戶端,並且錯誤地修改 Active Directory 物件的屬性,將會導致嚴重的問題。這些問題可能會導致您必須重新安裝 Microsoft Windows Server 2003、Microsoft Windows 2000 Server、Microsoft Exchange Server 2003、Microsoft Exchange 2000 Server,或者重新安裝 Windows 和 Exchange。我們無法保證可以解決錯誤修改 Active Directory 物件的屬性所造成的問題。請自行承擔修改這些屬性的一切風險。 注意若要為 SQL Server 的啟動帳戶授予適當的權限和使用者權力,您必須登入為網域系統管理員,或者請求網域系統管理員執行此動作。 若要設定 SQL Server 服務,以動態方式建立 SPN,請依照下列步驟執行:
確認伺服器環境檢查安裝 SQL Server 的電腦上的基本設定:
確認用戶端環境確認用戶端的下列項目:
驗證用戶端網路公用程式用戶端網路公用程式 (CNU) 隨附於 Microsoft Data Access Components (MDAC),功能是用於設定執行 SQL Server 的電腦連線能力。您可以使用 MDAC Cliconfg.exe CNU 公用程式來設定連線能力:
收集資訊並開啟 Microsoft 產品支援 (PSS) 案例如果此文件中的疑難排解步驟無法讓您瞭解問題的原因,請收集下列資訊並開啟 Microsoft 產品支援 (PSS) 案例:如需「Microsoft 技術支援處」完整的電話號碼清單,以及支援費用的相關資訊,請造訪下列 Microsoft 網站: http://support.microsoft.com/contactus/?ln=zh-tw&ws=support#tab0
(http://support.microsoft.com/contactus/?ln=zh-tw&ws=support#tab0)
如何手動設定 SQL Server 的服務主要名稱如需有關如何手動設定 SQL Server 服務主要名稱的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:319723?
(http://support.microsoft.com/kb/319723/zh-tw/
)
如何在 SQL Server 中使用 Kerberos 驗證
安全性支援提供者介面 (SSPI) 是 Microsoft Windows NT 安全性的介面,用於 Kerberos 驗證,並支援 NTLM 安全性支援提供者的驗證配置。當您登入 Windows 網域時,將在作業系統層級執行驗證。Kerberos 僅適用於已經啟用 Kerberos,並使用 Active Directory 的 Windows 2000 電腦。
SSPI 只適用於透過 Windows 驗證的 TCP/IP 連線。(Windows 驗證也稱為受信任的連線或整合式安全性)。SSPI 不會用於具名管道或多重通訊協定的連線。因此,您可以設定 TCP/IP 以外的通訊協定供用戶端連線,以避免這個問題。 當 SQL Server 用戶端嘗試使用整合式安全性,透過 TCP/IP 通訊端連線至執行 SQL Server 的遠端電腦時,SQL Server 用戶端的網路程式庫將使用 SSPI API 來執行安全性委派。SQL Server 網路用戶端 (Dbnetlib.dll) 會呼叫 AcquireCredentialsHandle 函式,並傳遞 pszPackage 參數的「交涉」值。這樣一來便告知了基礎安全性提供者來執行交涉委派。在此情況下,交涉代表嘗試在 Windows 電腦上執行 Kerberos 或 NTLM 驗證。換句話說,如果執行SQL Server 的目的電腦有相關聯且設定正確的 SPN,Windows 將使用 Kerberos 委派。否則,Windows 會使用 NTLM 委派。 注意確認您未使用名為「SYSTEM」的帳戶啟動任何 SQL Server 服務 (MSSQLServer、SQLServerAgent、MSSearch)。關鍵字 SYSTEM 可能會與金鑰發行中心 (KDC) 造成衝突。 ?考 如需有關 Kerberos 和 SSPI 安全性如何運作的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件: 266080?
(http://support.microsoft.com/kb/266080/zh-tw/
)
Kerberos 常見問題的解答
231789?
(http://support.microsoft.com/kb/231789/zh-tw/
)
Windows 2000 的本機登入程序
304161?
(http://support.microsoft.com/kb/304161/zh-tw/
)
SSPI 相互驗證在用戶端執行而非伺服器端
232179?
(http://support.microsoft.com/kb/232179/zh-tw/
)
在 Windows 2000 中的 Kerberos 管理
230476?
(http://support.microsoft.com/kb/230476/zh-tw/
)
在 Windows 2000 中與 Kerberos 相關的常見錯誤說明
262177?
(http://support.microsoft.com/kb/262177/zh-tw/
)
如何啟用 Kerberos 事件記錄
277658?
(http://support.microsoft.com/kb/277658/zh-tw/
)
如果網域名稱與註冊 SQL Server SPN 所用的 NetBIOS 名稱不同,Setspn 就會失敗
244474?
(http://support.microsoft.com/kb/244474/zh-tw/
)
如何強制 Kerberos 在 Windows 使用 TCP,而不使用 UDP
326985?
(http://support.microsoft.com/kb/326985/zh-tw/
)
如何在 IIS 中疑難排解 Kerberos 的相關問題
若要查看關於 Microsoft SQL Server 2000 安全性的白皮書,請造訪下列 Microsoft 網站:http://technet.microsoft.com/en-us/cc984178.aspx
(http://technet.microsoft.com/en-us/cc984178.aspx)
這篇文章中的資訊適用於:
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群立即取得協助文章翻譯 |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email
回此頁最上方
