问题
在之前的技巧中,您讨论了由于在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)的版本。
IIS version Registry location
IIS 5.0 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesw3svcparameters
IIS 6.0 HKEY_LOCAL_MACHINESystemCurrentControlSetServicesHTTPParameters
Internet Information Services 5.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应用程序的补救方法是相同的。