本文介绍一些与 Windows 安全相关的更新和更改,以及它们如何影响Microsoft分布式事务处理协调器(MS DTC)服务。
原始产品版本: Windows
原始 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 安全配置 对话框已得到增强,以便你可以管理这些通信设置。 若要查看“安全配置”对话框,请执行以下步骤:
- 启动组件服务管理工具。 为此,请选择“开始”,选择“运行”,键入dcomcnfg.exe,然后选择“确定”。
- 在组件服务管理工具的控制台树中,展开“组件服务”,展开“计算机”,右键单击“我的计算机”,然后选择“属性”。
- 选择“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。
“允许出站”复选框会影响以下两个REG_DWORD注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security
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 或更高版本的计算机上运行此选项。
传入调用方身份验证必需 会影响以下注册表项 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 防火墙设置中的例外列表。 要实现这一点,请执行下列操作:
- 选择“开始”,选择“运行”,键入firewall.cpl,然后选择“确定”。
- 在 “Windows 防火墙 ”对话框中,选择“ 例外 ”选项卡,然后选择“ 添加程序”。
- 选择“浏览”,找到并选择,
C:\Windows\System32\msdtc.exe
然后选择“打开”。 - 选中“确定”,选中“程序和服务”列表中的“msdtc.exe”复选框(如果尚未选中此复选框),然后选择“确定”。
已更改或添加的设置
下表描述了从早期版本的 Windows XP SP2 开始更改的注册表项。
注册表项名称 | 位置 | 之前的默认值 | 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