問題
在之前的技巧中,您討論了由於在Active Directory中存在大量的組,需要超越MaxTokenSize來容納更大的Kerberos tokens。與此同時,我們也注意到MaxTokenSize需要做出相應調整,這是由於使用Windows 集成身份認證(Windows Integrated Authentication)的web應用程序也出現了啟動失敗的問題,其中包括SQL Server Reporting Services。我就職的公司做出了必要的改動並重新啟動了SQL和Web服務器。啟動後,盡管SQL Server Management Studio的問題解決了,但是我們的Web應用程序仍然存在問題。請問還需要再做什麼改動呢?
專家解答
先前關於Kerberos Token sizes的方法解決了在以下目錄的一段注冊表中修改MaxTokenSize的問題:HKEY_LOCAL_MacHINESystemCurrentControlSetControlLsaKerberosParameters。不幸的是,當使用Windows集成身份驗證(Windows Integrated Authentication)連接到SQL Server時,這並不是預設大小的唯一的地方。額外的兩個值是MaxFIEldLength 和MaxRequestBytes。與MaxTokenSize不同的是,當問題影響到web應用程序時,它呈現出不同的一點。默認情況下,Windows集成身份驗證(Windows Integrated Authentication)在Internet Explorer中啟用,在Internet Options | Advanced界面中顯示如下:
圖一
當用戶嘗試用別名或者DNS名稱訪問網頁時,DNS解析將嘗試進行。因為規模較大的Kerberos token大小超過默認的MaxFIEldLength,你將立即得到錯誤的信息。這與由於在輸入地址和接收“網頁無法顯示”的錯誤信息存在時間差而導致一個網頁無法找到的情況不同。這個難題中有趣的部分在於,如果嘗試要麼用主機名要麼用別名來訪問網頁,它是不會成功的。盡管如此,網頁可以通過IP地址訪問。然而,在網頁加載時任何SQL查詢的執行都會失敗。
當遇到網站錯誤時,Internet Explorer的默認行為是顯示用戶界面友好的信息。你可以在如下顯示的Internet Explorer中關閉這種行為。
圖二
這些用戶界面友好的訊息將提供用於解決問題的信息。一旦你關掉用戶界面友好的信息,你將看到如下的信息:
圖三
如上所述,額外注冊表項需要超越這些默認值。注冊表項的位置取決於使用的Internet Information Server (IIS)的版本。
IISversionRegistrylocation
IIS5.0HKEY_LOCAL_MacHINESYSTEMCurrentControlSetServicesw3svcparameters
IIS6.0HKEY_LOCAL_MacHINESystemCurrentControlSetServicesHTTPParameters
InternetInformationServices5.0
在IIS 5.0中,注冊表項要求是MaxClIEntRequestBuffer DWORD項。Microsoft建議的DWord值是32768。
Internet Information Services 6.0
在IIS 6.0中要求有兩個注冊表項。第一個是MaxFIEldLength DWORD項。根據Microsoft的建議,DWORD值是65534。第二個是MaxRequestBytes DWord,Microsoft的建議值是500000。
一旦注冊表項完成了,IIS Admin and dependent services需要重啟,但是服務器不一定需要重啟。原來的問題在Outlook Web Access中被發現,而補救方法在一篇有關Outlook Web Access的知識庫文章中有所描述。當采用Kerberos身份驗證時,無論是使用什麼技術,對web應用程序的補救方法是相同的。