Windows 中分布式事务处理协调器服务中的新功能

本文介绍一些与 Windows 安全性相关的更新和更改,以及它们如何影响 Microsoft 分布式事务处理协调器 (MS DTC) 服务。

原始产品版本: 窗户
原始 KB 编号: 899191

摘要

由于 Windows Server 2003 Service Pack 1 (SP1) 和 Windows XP Service Pack 2 (SP2) ,Windows 引入了一些与安全性相关的更新和更改,并影响 MS DTC 服务。

可以使用组件服务管理工具中提供的更新 的安全配置 对话框来访问这些更改。

这些更改是针对导致 DTC 流量故障转移到网络的默认安全设置进行的。 在这种情况下,你可能会收到一条或多条错误消息或错误代码。

通过修改“ 安全配置 ”对话框中的设置,可以帮助控制 DTC 服务如何通过网络与远程计算机通信。

本文介绍以下操作系统中的 MS DTC 服务中的新功能:

  • Windows Server 2003 Service Pack 1 (SP1)
  • Windows XP Service Pack 2 (SP2)
  • Windows Vista
  • Windows Server 2008
  • Windows 7
  • Windows Server 2008 R2
  • Windows 8
  • Windows Server 2012
  • Windows 8.1
  • Windows Server 2012 R2

DTC 服务协调更新两个或多个受事务保护的资源的事务。 受事务保护的资源包括数据库、消息队列和文件系统。 这些受事务保护的资源可能位于一台计算机上,也可以分布在多个网络计算机之间。

使用安全配置管理网络通信

在 Windows 中,DTC 服务可让你更好地控制计算机之间的网络通信。 默认情况下,所有网络通信都处于禁用状态。 “DTC 安全配置 ”对话框已得到增强,以便可以管理这些通信设置。 若要查看“ 安全配置 ”对话框,请执行以下步骤:

  1. 启动组件服务管理工具。 为此,请选择“ 开始”,选择“ 运行”,键入 “dcomcnfg.exe”,然后选择“ 确定”。
  2. 在“组件服务”管理工具的控制台树中,依次展开 “组件服务”、“ 计算机”,右键单击“ 我的计算机”,然后选择“ 属性”。
  3. 选择“ MSDTC ”选项卡,然后选择“ 安全配置”。

安全配置中的新选项

以下信息介绍了“ 安全配置 ”对话框中提供的新选项。 此信息还介绍了受 “安全配置 ”对话框中新选项影响的注册表项。

网络 DTC 访问

使用“网络 DTC 访问检查”框,可以确定 DTC 服务是否可以访问网络。 “网络 DTC 访问检查”框必须与“网络 DTC 访问检查”框下的其他检查框之一一一起选中,才能启用网络 DTC 事务。

网络 DTC 访问检查”框会影响以下注册表项:

  • 注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security
  • 值名称: NetworkDtcAccess
  • 值类型:REG_DWORD
  • 值数据:0 (默认)

注意

在服务器群集上,“网络 DTC 访问检查”框会影响 MS DTC 资源注册表项下的共享群集注册表项中的值。 MS DTC 的共享群集的注册表项位于 位置 HKEY_LOCAL_MACHINE\Cluster\Resources\<MSDTC resource GUID>

默认情况下,注册表项的值 NetworkDtcAccess 设置为 0。 值为 0 会关闭 NetworkDtcAccess 注册表项。 若要打开 NetworkDtcAccess 注册表项,请将此注册表值设置为 1。

允许入站

使用“允许入站检查”框可确定是否允许源自远程计算机的分布式事务在本地计算机上运行。 默认情况下,此设置已关闭。 若要启用此设置,请单击以选中“网络 DTC 访问检查”框,将以下注册表项设置为 1:

  • 注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security
  • 值名称: NetworkDtcAccess
  • 值类型:REG_DWORD

若要禁用此设置,请单击以清除“网络 DTC 访问检查”框,将此注册表项设置为 0。

允许入站检查”框影响以下两个REG_DWORD注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security

  • NetworkDtcAccessTransactions
  • NetworkDtcAccessInbound

允许出站

使用“允许出站检查”框可确定是否允许本地计算机启动事务并在远程计算机上运行该事务。 若要启用此设置,请选择“网络 DTC 访问检查”框,将以下注册表项设置为 1:

  • 注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security
  • 值名称: NetworkDtcAccess
  • 值类型:REG_DWORD

若要禁用此设置,请清除“网络 DTC 访问检查”框,将此注册表项设置为 0。

允许出站检查”框影响下面的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security两个REG_DWORD注册表项:

  • NetworkDtcAccessTransactions
  • NetworkDtcAccessOutbound

需要相互身份验证

需要相互身份验证 ”选项添加了对 Windows 中相互身份验证的支持。 “需要相互身份验证 ”设置当前可用于网络通信的最大安全模式。 建议对运行 Windows XP SP2 的客户端计算机以及运行 Windows Server 2003 SP1 的服务器计算机使用此事务模式。

“需要相互身份验证 ”会影响 下面的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC注册表项:

  • 注册表项 1

    • 值名称: AllowOnlySecureRpcCalls
    • 值类型:REG_DWORD
    • 值数据:1
  • 注册表项 2

    • 值名称: FallbackToUnsecureRPCIfNecessary
    • 值类型:REG_DWORD
    • 值数据:0
  • 注册表项 3

    • 值名称: TurnOffRpcSecurity
    • 值类型:REG_DWORD
    • 值数据:0

使用 “需要相互身份验证 ”设置的功能不同于使用 “需要传入调用方身份验证”设置的功能。 事务管理器通信下列出的三个选项的行为如下:

  • 需要相互身份验证” 事务模式要求远程访问组件提供与本地计算机的身份验证连接。 此身份验证通过本地计算机上的模拟进行验证。 此外,如果在两个 DTC 服务之间执行远程访问通信,则此身份验证信息必须指定与远程事务模式计算机的主机名匹配的计算机帐户。

  • “需要传入调用方身份验证”事务模式仅要求对远程连接进行身份验证。 此外,如果远程访问组件是 DTC 服务,则身份验证信息必须为计算机帐户。

  • “不需要身份验证”事务模式不会验证经过身份验证的连接,也不会验证是否已建立经过身份验证的连接。

在群集环境中,DTC 服务的计算机帐户指定群集节点的主机名。 在群集环境中,DTC 身份验证不使用事务模式的主机名。 在群集环境中,事务模式的主机名是虚拟服务的名称。 因此,不能在群集环境中或在与此类计算机协商事务的任何计算机上使用 “需要相互身份验证 ”事务模式。 可以在运行 Windows Server 2003 SP1 的两台非聚集计算机之间或运行 Windows XP SP2 的两台计算机之间使用 “需要相互身份验证” 事务模式。

在群集环境中基于 Windows Server 2003 的计算机之间使用 “需要传入调用方身份验证 ”事务模式。

使用“ 无需身份验证” 事务模式,其中一个或多个条件为 true:

  • 网络访问是在运行 Microsoft Windows 2000 的计算机之间进行的。
  • 网络访问在未配置相互信任的两个域之间。
  • 网络访问位于属于工作组的计算机之间。

需要传入呼叫方身份验证

传入调用方身份验证要求 本地 DTC 服务仅使用加密的消息与远程 DTC 服务通信。 仅对传入连接进行身份验证。 只有 Windows Server 2003 SP1、Windows XP SP2 及更高版本的 Windows 支持此功能。 因此,仅当远程 DTC 服务在运行 Windows Server 2003 SP1、Windows XP SP2 或更高版本 Windows 的计算机上运行时,才启用此选项。

需要传入调用方身份验证 会影响 下面的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC注册表项:

  • 注册表项 1

    • 值名称:AllowOnlySecureRpcCalls
    • 值类型:REG_DWORD
    • 值数据:0
  • 注册表项 2

    • 值名称:FallbackToUnsecureRPCIfNecessary
    • 值类型:REG_DWORD
    • 值数据:1
  • 注册表项 3

    • 值名称:TurnOffRpcSecurity
    • 值类型:REG_DWORD
    • 值数据:0

有关 需要传入调用方身份验证的详细信息,请参阅 需要相互身份验证 部分。

无需身份验证

“无身份验证要求” 启用早期版本的 Windows 操作系统之间的操作系统兼容性。 启用此选项后,如果无法建立安全信道,DTC 服务之间的网络通信可以回退到未经身份验证的通信或非加密通信。

注意

如果远程 DTC 服务在运行 Microsoft Windows 2000 的计算机或运行早于 Windows XP SP2 的 Windows XP 版本的计算机上运行,我们建议使用此设置。

还可以使用 “无需身份验证” 来解决 DTC 服务在未建立信任关系的域中的计算机上运行的情况。 此外,可以使用 “无需身份验证” 来解决 DTC 服务在属于工作组成员的计算机上运行的情况。

“不需要身份验证” 会影响下面的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC注册表项:

  • 注册表项 1

    • 值名称:AllowOnlySecureRpcCalls
    • 值类型:REG_DWORD
    • 值数据:0
  • 注册表项 2

    • 值名称:FallbackToUnsecureRPCIfNecessary
    • 值类型:REG_DWORD
    • 值数据:0
  • 注册表项 3

    • 值名称:TurnOffRpcSecurity
    • 值类型:REG_DWORD
    • 值数据:1

注意

在服务器群集上,这些注册表项位于共享群集注册表中。

新选项的重要性

安全配置 ”对话框中提供的新选项使你可以将安全设置应用于传出或传入网络通信。 默认情况下,安装 Windows 后,计算机不接受网络流量。 因此,计算机不太容易受到恶意用户的网络访问。 此外,通过网络发送的协议将更新,以支持更安全的加密和相互身份验证的通信模式。 这有助于降低恶意用户截获和接管 DTC 服务之间的通信的可能性。

Windows 中的网络通信更改

来自 DTC 服务或进入 DTC 服务的网络通信被禁用。 例如,如果 COM+ 对象尝试使用 DTC 事务更新位于远程计算机上的 Microsoft SQL Server 数据库,则此事务不会成功。 相反,如果计算机托管SQL Server数据库,而远程计算机上的组件尝试使用 DTC 事务访问该数据库,则此事务不会成功。

以下问题与 DTC 服务相关:

由于网络连接问题,事务失败

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。 为了加强保护,应先备份注册表,再进行修改。 如果出现问题,可以还原注册表。 有关如何备份和还原注册表的详细信息,请参阅如何备份和还原 Windows 中的注册表

如果 DTC 事务因网络连接问题而失败,请单击以在“安全配置”对话框中选择以下检查框:

  • 单击以选中“网络 DTC 访问检查”框。

  • 单击以选择事务管理器通信下的以下一个或两个检查框,具体取决于你的要求:

    • 允许入站
    • 允许出站

如果要以编程方式更改这些设置作为 Windows 的一部分,可以直接修改与要设置的设置对应的注册表设置。 修改注册表设置后,必须重启 DTC 服务。

建议不要手动修改注册表以更改这些设置。 如果手动修改这些注册表设置,则可能在基于 Windows Server 2003 SP1 的服务器群集上遇到群集服务问题。

Windows 防火墙阻止 DTC 流量

重要

这些步骤可能会增加安全风险。 这些步骤还可能使计算机或网络更容易受到恶意用户或恶意软件(如病毒)的攻击。 建议使用本文介绍的过程,使程序能够按照其设计或实现特定程序功能一样运行。 在进行这些更改之前,建议评估与在特定环境中实现此过程相关的风险。 如果决定实施此过程,请执行任何适当的附加步骤来帮助保护系统。 建议仅在确实需要此过程时才使用此过程。

如果使用 Windows 防火墙,则必须将 DTC 服务添加到 Windows 防火墙设置中的例外列表。 为此,请按照下列步骤操作:

  1. 依次选择“ 开始”、“ 运行”、“ firewall.cpl”,然后选择“ 确定”。
  2. “Windows 防火墙 ”对话框中,选择“ 例外 ”选项卡,然后选择“ 添加程序”。
  3. 选择“ 浏览”,找到并选择 , C:\Windows\System32\msdtc.exe然后选择“ 打开”。
  4. 如果尚未选中此检查 框,请选择“程序和服务”列表中的“msdtc.exe检查”框,然后选择“确定”。

更改或添加的设置

下表描述了自 Windows XP SP2 以来从早期版本的 Windows 中更改的注册表项。

项名 位置 以前的默认值 Windows XP SP2 默认值 可能的值
NetworkDtcAccess HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security 1 0 0 或 1
NetworkDtcAccessTransactions KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security 1 0 0 或 1
NetworkDtcAccessInbound HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security 不适用 0 0 或 1
NetworkDtcAccessOutbound HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security 不适用 0 0 或 1
AllowOnlySecureRpcCalls HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC 不适用 1 0 或 1
FallbackToUnsecureRPCIfNecessary HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC 不适用 0 0 或 1
TurnOffRpcSecurity HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC 不适用 0 0 或 1

注意

这些更改显示在基于 Windows Server 2003 SP1 的服务器群集上的共享群集注册表中。

与 DTC 服务更改关联的错误代码

在计算机之间运行 DTC 事务时,可能会收到以下错误代码之一:

  • 错误代码 1

    MessageId:XACT_E_NETWORK_TX_DISABLED
    MessageText:
    事务管理器已禁用对远程/网络事务的支持。
    #define XACT_E_NETWORK_TX_DISABLED HRESULT_TYPEDEF (0x8004D024L)

  • 错误代码 2

    MessageId:XACT_E_PARTNER_NETWORK_TX_DISABLED
    MessageText:
    合作伙伴事务管理器已禁用对远程/网络事务的支持。
    #define XACT_E_PARTNER_NETWORK_TX_DISABLED HRESULT_TYPEDEF (0x8004D025L)

适用对象

  • Windows Server 2012 R2
  • Windows 8.1
  • Windows 8
  • Windows 7
  • Windows Vista
  • Windows Server 2008
  • Windows Server 2003
  • Windows XP