从独立机器到域机器的MSDTC

本文关键字:机器 MSDTC 独立 | 更新日期: 2023-09-27 18:11:12

问题是,我们有一个网站在一个独立的网络服务器上(Windows 2003 SP2 -机器名称是TESTAPP,可以在下面的日志中看到),它使用TransactionScope。

SQL Server 2008 R2 (Windows Server 2008)在域中

当单机遇到TransactionScope时,它会失败(错误细节会随之而来)。

当我从与DB服务器在同一域中的机器上运行代码时,它工作得很好。

在独立机器上,我得到了普遍存在的错误:

Error HRESULT E_FAIL has been returned from a call to a COM component.

然而MSDTC是正确设置的,它顺便使用网络服务。dtcp .exe在两种方式下都可以正常工作。

在深入到DB机器后,我发现了以下审计失败:

帐户登录失败。

Subject:
Security ID:        NULL SID
Account Name:       -
Account Domain:     -
Logon ID:       0x0
Logon Type:         3
Account For Which Logon Failed:
Security ID:        NULL SID
Account Name:       TESTAPP$
Account Domain:     WORKGROUP
Failure Information:
Failure Reason:     Unknown user name or bad password.
Status:         0xc000006d
Sub Status:     0xc0000064
Network Information:
Workstation Name:   TESTAPP
Source Network Address: 192.168.**.**
Source Port:        1202

单机试图使用自己的机器名登录到SQL Server机器,天知道它用什么作为密码。

因此,是否有可能使MSDTC从独立机器工作到域机器?

注:如果可能的话(如果有其他方法),我不想影响"HKEY_LOCAL_MACHINE'SOFTWARE'Microsoft'MSDTC'TurnOffRpcSecurity"注册表项。

P.P.S.如果可能的话,我想在MSDTC上保持相互认证要求,(我知道一个可能的解决方案是将MSDTC设置为要求无身份验证,但我不确定这是否完全必要)

关于它的奇怪的事情是使用一个测试独立的web服务器域DB服务器MSDTC工作良好是否设置为无身份验证或相互身份验证!: S

P.P.S.两台机器上的防火墙都关闭了。

从独立机器到域机器的MSDTC

哎呀,要是我早一点尝试使用实时系统的副本来设置测试就好了……

一旦我关闭了相互认证并将其设置为无认证,它就像一个魅力。

注:不,在不向外部世界开放MSDTC机器/端口的环境中,Auth不是一个很大的安全漏洞。请参阅msdtc安全配置中使用不安全rpc无需身份验证设置的潜在风险

可以跨数据访问方法使用一个连接对象。这样就不会触发MSDTC。我有类似的经验,但没有权限调整SQL服务器。使用单例模式,我创建了数据连接,并在跨多个方法调用的事务中使用相同的连接对象。