扩展保护故障排除 (Reporting Services)

使用本主题可以排除在将扩展保护用于 SQL Server 2008 R2 Reporting Services 时所遇到的问题。本主题也可用于排除常规身份验证问题,因为这些问题的根源可能是扩展保护的配置。 有关扩展保护的最新开发动态的信息,请参阅 updated information with Extended Protection(扩展保护的更新信息)

Common issues and support scenarios

Error messages

Error states

常见问题和支持方案

如何检查当前扩展保护设置?

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 客户端应用程序可以进行连接。若要禁用扩展保护:

  1. 请在 RSReportServer.config 文件中将 RSWindowsExtendedProtectionLevel 设置为 Off。

  2. 重新启动报表服务器服务。

此方案旨在下载所有 .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 设置缺失或无效

错误

  • RSWindowsExtendedProtectionScenario 不在 rsreportserver.config 文件中。

  • 将配置文件更新为默认值。

  • RSWindowsExtendedProtectionLevel 设置的默认值为 Off。

  • RSWindowsExtendedProtectionScenario 设置的默认值为 Proxy。

当 ExtendedProtectionScenario 设置为“直接”时,报表服务器连接需要 SSL

错误

  • RSWindowsExtendedProtectionScenario 设置为 Direct。

  • Direct 选项要求 SSL 连接。

  • 获取 SSL 证书,并为报表服务器和报表管理器配置 SSL URL。当在 SharePoint 集成模式下使用 Reporting Services 时,需要对 SharePoint 管理中心进行相同的操作。

  • 将 RSWindowsExtendedProtectionLevel 设置为 Off,直至获取和配置 SSL 证书。

  • 如果将不配置 SSL 证书并且仍需要某些保护机制,则将 RSWindowsExtendedProtectionScenario 设置为 Any。

当使用 NTLM、Kerberos 或 Negotiate 身份验证时,到报表服务器的 HTTP 流量将失败

警告

  • RSWindowsExtendedProtectionScenario 设置为 Direct。

  • “直接”选项要求 SSL。

  • 配置了 HTTP URl 保留项。对此 URL 保留项进行身份验证时将失败。

  • 使用 HTTPS 与报表服务器进行通信。

  • 使用 Reporting Services 配置管理器删除 HTTP URL 保留项。

当 ExtendedProtectionScenario 设置为“直接”时,报表管理器连接需要 SSL

错误

  • RSWindowsExtendedProtectionScenario 设置为 Direct。

  • Direct 要求 SSL。

  • 报表管理器没有 SSL URl 配置。

  • 获取 SSL 证书,并为报表服务器和报表管理器配置 SSL URL。当在 SharePoint 集成模式下使用 Reporting Services 时,需要对 SharePoint 管理中心进行相同的操作。

  • 将 RSWindowsExtendedProtectionLevel 设置为 Off,直至获取和配置 SSL 证书。

  • 如果将不配置 SSL 证书并且仍需要某些保护机制,则将 RSWindowsExtendedProtectionScenario 设置为 Any。

当使用 NTLM、Kerberos 或 Negotiate 身份验证时,到报表服务器的直接连接将失败

警告

  • RSWindowsExtendedProtectionScenario 为代理;不为报表管理器配置任何 SSL URl。

  • 当配置此方式时,用户“必须”通过 SSL 渠道与代理建立连接。此连接可由代理设备终止。如果与 SSRS 服务器建立直接连接而不使用 SSL 渠道,则身份验证将会失败。

  • 验证客户端仅使用 HTTPS。

  • 验证已为代理配置了 SSL 终止。

  • 验证所有计算机(无论是本地计算机还是远程计算机)均已配置为使用代理来连接到报表服务器和报表管理器。这可能要求对本地计算机进行 DNS 更新、浏览器代理更新或提供自定义 HOSTS 文件条目。

  • 当在 SharePoint 集成模式下使用 Reporting Services 时,在 Reporting Services 服务器上为报表服务器和报表管理器或 SharePoint 管理中心配置 SSL URL。 所有本地连接都必须使用 SSL URL。 这假设没有为任何代理配置终止。

  • 显式将报表管理器 URL 设置为使用具有 SSL 的代理 URL。

当使用 NTLM、Kerberos 或 Negotiate 身份验证时,到报表管理器的 HTTP 流量可能失败

警告

  • ExtendedProtectionScenario 设置为 Proxy 并且为报表服务器配置了 SSL URl。

  • 当以此方式配置时,通过代理进行访问的用户预期可以成功进行身份验证,即使从代理到报表管理器的连接不是通过 SSL 渠道建立的也不例外。

  • 到报表管理器的本地连接必须使用 SSL。

  • 验证客户端仅使用 HTTPS(SSL 渠道)。

  • 验证已为代理配置了 SSL 终止。

  • 验证所有计算机(无论是本地计算机还是远程计算机)均已配置为使用代理来连接到报表服务器和报表管理器。这可能要求对本地计算机进行 DNS 更新、浏览器代理更新或提供自定义 HOSTS 文件条目。

  • 在 Reporting Services 服务器上为报表服务器和报表管理器配置 SSL URL。所有本地连接都必须使用 SSL URL。这假设没有为任何代理配置终止。

  • 显式将报表管理器 URL 设置为使用具有 SSL 的代理 URL。

错误状态

本部分包含您可能在报表服务器的服务跟踪日志中看到的、与扩展保护相关的错误代码的名称和说明。有关详细信息,请参阅报表服务器服务跟踪日志

代码

错误状态名称

说明

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 错误代码指示错误的原因。