扩展保护故障排除 (Reporting Services)
使用本主题可以排除在将扩展保护用于 SQL Server 2008 R2 Reporting Services 时所遇到的问题。本主题也可用于排除常规身份验证问题,因为这些问题的根源可能是扩展保护的配置。 有关扩展保护的最新开发动态的信息,请参阅 updated information with Extended Protection(扩展保护的更新信息)。
Common issues and support scenarios
Error messages
Error states
常见问题和支持方案
如何检查当前扩展保护设置?
RSWindowsExtendedProtectionLevel 设置和 RSWindowsExtendedProtectionScenario 设置均保存在 rsreportserver.config 文件中。有关配置设置的详细信息,请参阅 Reporting Services 身份验证的扩展保护。
使用 WMI API。有关详细信息,请参阅 SetExtendedProtectionSettings 方法 (WMI MSReportServer_ConfigurationSetting)。
reportserverservice 跟踪日志文件将包含指示当前设置的条目。在启动报表服务器服务时,将写入跟踪日志条目。这些条目类似于以下内容:
library!DefaultDomain!698!12/29/2009-10:14:49:: i INFO:按照在配置文件中指定的方式,将 RSWindowsExtendedProtectionLevel 初始化为“关闭”。
library!DefaultDomain!698!12/29/2009-10:14:49:: i INFO:按照在配置文件中指定的方式,将 RSWindowsExtendedProtectionScenario 初始化为“代理”。
我如何了解扩展保护导致身份验证失败?
报表服务器的服务跟踪日志文件包含类似以下内容的条目:
http!rshost!ec0!12/29/2009-11:01:37:: i INFO:身份验证失败,错误状态:46
可以在本主题末尾的error states列表中查找错误状态号和其他信息。
如何可以验证是否正在执行扩展保护检查?
通过更新配置文件 reportingservicesservice.exe.config 来启用详细日志记录。在 <RStrace> 部分,设置:
<add name=”Components” value=”all:4” />
重新启动服务。
启用详细日志记录后,身份验证将写入类似以下内容的行,指示正在执行渠道绑定、服务绑定或二者的验证:
http!rshost!ec0!12/29/2009-11:01:37:: v VERBOSE:正在作为代理执行渠道绑定检查。
http!rshost!7b0!12/29/2009-11:26:23:: v VERBOSE:正在执行服务绑定检查。
有关详细信息,请参阅 ReportingServicesService 配置文件。
报表服务器目录
Microsoft SQL 客户端尚未更新,无法在 SQL Server 2008 R2 发布时支持扩展保护。使用 SQL 客户端可连接到 SQL Server 数据源和 Reporting Services 目录数据库。SQL 客户端中的限制会通过以下方式影响 Reporting Services:
运行 Reporting Services 目录数据库的 SQL Server 无法启用扩展保护,或者,报表服务器将无法连接到目录数据库并返回身份验证错误。
所有用作 Reporting Services 报表数据源的 SQL Server 都无法启用扩展保护,或者报表服务器尝试连接到报表数据源时将失败并且返回身份验证错误。一个可能的解决办法是将 Reporting Services 数据源更改为使用本机提供程序,而非 SQL 客户端。例如,为 ODBC 驱动程序配置数据源,然后将使用 SQL Native Client,因为它支持扩展保护。
当启用扩展保护而未配置 SSL 时,会发生什么情况?
此行为取决于 rsreportserver.config 配置文件中 RSWindowsExtendedProtectionScenario 的设置。
如果 RSWindowsExtendedProtectionScenario 设置为“直接”且 SSL 缺失
当 RSWindowsExtendedProtectionScenario 为 Direct,且对于报表服务器或报表管理器没有 SSL URL 保留项时,用户查看报表服务器或报表管理器的一般体验将是看到一个空的报表管理器窗口。
这是因为:当缺少 SSL 且 RSWindowsExtendedProtectionScenario 设置为“直接”时,报表服务器会禁用身份验证类型 <RSWindowsNTLM />、<RSWindowsNegotiate /> 和 <RSWindowsKerberos />。因此,未启用任何身份验证类型,报表服务器将不响应请求。这将导致出现空窗口。
跟踪日志文件将包含类似以下内容的错误消息:
configmanager!DefaultDomain!938!12/29/2009-11:39:39:: e ERROR:当 ExtendedProtectionScenario 设置为“直接”时,报表服务器连接需要 SSL
configmanager!DefaultDomain!938!12/29/2009-11:39:39:: e ERROR:当 ExtendedProtectionScenario 设置为“直接”时,报表管理器连接需要 SSL
如果 RSWindowsExtendedProtectionScenario 设置为“代理”且 SSL 缺失
当 RSWindowsExtendedProtectionScenario 设置为“代理”且 SSL 不是环境的一部分时,用户查看报表服务器或报表管理器的一般体验将是看到凭据提示页,此时将始终无法成功完成身份验证。如果在报表服务器上配置 SSL,则将“s”添加到报表服务器或报表管理器浏览器所使用的 URL,可以解决此问题。例如,如果显示身份验证对话框的问题是由于将 RSWindowsExtendedProtectionSscenario 设置为 proxy 所致,则 https://<uri> 将解决此问题。
报表服务器的跟踪日志文件将包含类似以下内容的消息:
http!rshost!ec0!12/29/2009-11:01:37:: i INFO:正在作为代理执行渠道绑定检查
http!rshost!76c!12/29/2009-10:26:12:: i INFO:身份验证失败,错误状态:45
http!rshost!ec0!12/29/2009-11:01:37:: i INFO:正在作为代理执行渠道绑定检查
http!rshost!ec0!12/29/2009-11:01:37:: i INFO:身份验证失败,错误状态:46
启用扩展保护之后,我可以使用 Internet Explorer 进行连接,但无法使用报表生成器、Management Studio 或任何 .NET 客户端进行连接
这种情况仅适用于 Windows 7 和 Windows 2008 R2 之前的操作系统。早期的 Windows 版本最初没有发布扩展保护功能,因此,使用较早版本操作系统的计算机可能不包含所有扩展保护更新,包括对 .NET Framework 的扩展保护更新。
当 RSWindowsExtendedProtectionLevel 为 Allow 或 Require 时,在支持扩展保护的操作系统上运行的客户端应用程序必须提供渠道绑定,有时还必须提供服务绑定。在此示例中:
对 Internet Explorer 进行了更新以加入扩展保护功能,以将其作为 Windows 扩展保护更新的一部分。
但是,.NET Framework 尚未进行修补。.NET Framework 是 .NET 客户端(如报表生成器和 Management Studio)所必需的。
若要诊断此问题,请禁用扩展保护,并验证 .NET 客户端应用程序可以进行连接。若要禁用扩展保护:
请在 RSReportServer.config 文件中将 RSWindowsExtendedProtectionLevel 设置为 Off。
重新启动报表服务器服务。
此方案旨在下载所有 .NET Framework 更新。
为什么在启用扩展保护时,本地连接传递身份验证,而远程连接却失败?
当进行环回身份验证时,操作系统将跳过身份验证机制,而不实行渠道绑定。
因此,当使用 HTTP 连接且配置设置为以下内容时:
RSWindowsExtendedProtectionLevel 设置为 Require
并且
RSWindowsExtendedProtectionScenario 设置为 Proxy
本地连接将会成功,但远程连接将失败。
根据用于建立本地连接的 URL 和在报表服务器上配置的 URL 保留项,本地连接将仍可能会失败且服务绑定也会失败,因为从 URL 保留项中创建的 SPN 可能与有效 SPN 列表中的 SPN 不匹配。
如果您建立 HTTP 连接,但在客户端与配置为进行 SSL 连接的报表服务器之间没有网关设置,则远程连接将始终失败。
使用主机标头时,发生“401 未经授权”错误
这种情况特定于 Reporting Services 的扩展部署,当报表管理器和报表服务器在同一台计算机上且同时使用主机标头和 Windows 身份验证时,会出现此情况。例如,如果您尝试访问位于 http://<thename>/reports 的报表服务器,将不会看到预期的列表报表和文件夹,但会收到一条“HTTP 401(未经授权)”错误消息。
引用 <thename> 不是计算机的物理名称,而被视为“主机标头”。它是安装 Reporting Services 的计算机的备用名称。当 Reporting Services 计算用于扩展保护的有效 SPN 列表时,主机标头还可用作有效 SPN 的一个源。
为了避免出现“401 未经授权”错误,需要将 <thename> 的 NetBIOS 和完全限定域名 (FQDN) 添加到存储在 Windows 注册表中的 BackConnectionHostNames 列表。更改注册表项之后,请重新启动计算机。
有关如何更改注册表项的详细信息,请参阅 Microsoft 知识库文章 896861 当您浏览的网站使用集成身份验证并承载于 IIS 5.1 或更高版本时收到 401.1 错误中的“方法 2:指定主机名”部分。
错误消息
在报表服务器的服务跟踪日志文件中可能会看到以下消息列表。
错误消息 |
类型 |
原因 |
故障排除步骤 |
---|---|---|---|
ExtendedProtectionScenario 设置缺失或无效 |
错误 |
|
|
当 ExtendedProtectionScenario 设置为“直接”时,报表服务器连接需要 SSL |
错误 |
|
|
当使用 NTLM、Kerberos 或 Negotiate 身份验证时,到报表服务器的 HTTP 流量将失败 |
警告 |
|
|
当 ExtendedProtectionScenario 设置为“直接”时,报表管理器连接需要 SSL |
错误 |
|
|
当使用 NTLM、Kerberos 或 Negotiate 身份验证时,到报表服务器的直接连接将失败 |
警告 |
|
|
当使用 NTLM、Kerberos 或 Negotiate 身份验证时,到报表管理器的 HTTP 流量可能失败 |
警告 |
|
|
错误状态
本部分包含您可能在报表服务器的服务跟踪日志中看到的、与扩展保护相关的错误代码的名称和说明。有关详细信息,请参阅报表服务器服务跟踪日志。
代码 |
错误状态名称 |
说明 |
---|---|---|
44 |
SNIAUTH_ERRST_SSPIHANDSHAKE_CHANNELBINDINGS_NOTSUPPORTED |
操作系统不支持渠道绑定,但报表服务器配置为要求扩展保护。更新操作系统或禁用扩展保护。 |
45 |
SNIAUTH_ERRST_SSPIHANDSHAKE_CHANNELBINDINGS_EMPTYORWRONG |
来自客户端的渠道绑定与已建立的传输层安全渠道不匹配。服务可能处于攻击之中,或者数据访问接口可能需要升级以便支持扩展保护。该连接已关闭。 |
46 |
SNIAUTH_ERRST_SSPIHANDSHAKE_CHANNELBINDINGS_NULLOREMPTYORWRONG |
来自此客户端的渠道绑定缺失或与已建立的传输层安全渠道不匹配。服务可能处于攻击之中,或者数据访问接口或客户端操作系统可能需要升级以便支持扩展保护。该连接已关闭。 |
48 |
SNIAUTH_ERRST_SSPIHANDSHAKE_SERVICEBINDINGS_UNSUPPORTED |
操作系统不支持服务绑定,但服务器配置为要求扩展保护。更新操作系统或禁用扩展保护。 |
49 |
SNIAUTH_ERRST_SSPIHANDSHAKE_SERVICEBINDINGS_QUERYCONTEXTATTRIBUTES |
QueryContextAttributes 无法检索服务绑定。此 Windows 错误代码指示错误的原因。 |
51 |
SNIAUTH_ERRST_SSPIHANDSHAKE_SERVICEBINDINGS_NULL |
服务器扩展保护级别设置为 Allowed(允许)或 Required(必需),但客户端未提供服务主体名称 (SPN)。若要连接,此客户端必须支持扩展保护。您可能必须安装允许服务绑定和渠道绑定的操作系统 Service Pack。 |
52 |
SNIAUTH_ERRST_SSPIHANDSHAKE_SERVICEBINDINGS_EMPTY |
服务器扩展保护级别设置为 Allowed(允许)或 Required(必需),但客户端未提供 SPN。若要连接,此客户端必须支持扩展保护。 |
53 |
SNIAUTH_ERRST_SSPIHANDSHAKE_SERVICEBINDINGS_SERVICECLASSMISMATCH |
收到的 SPN 的服务类元素无效。 |
54 |
SNIAUTH_ERRST_SSPIHANDSHAKE_SERVICEBINDINGS_IPADDRESSMISMATCH |
所收到的 SPN 的 IP 地址元素无效。 |
55 |
SNIAUTH_ERRST_SSPIHANDSHAKE_SERVICEBINDINGS_HOSTNAMEMISMATCH |
所收到的 SPN 的主机元素无效。 |
56 |
SNIAUTH_ERRST_SSPIHANDSHAKE_OOM |
当验证所收到的 SPN 时,内存分配失败。 |
57 |
SNIAUTH_ERRST_SSPIHANDSHAKE_SERVICEBINDINGS_WSASTRINGTOADDRESSFAILEDFORIPV6 |
WSAStringToAddress 无法将所收到的 SPN 的 IP 地址元素转换为地址结构。此 Windows 错误代码指示错误的原因。 |