从独立机器到域机器的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机器/端口的环境中,Auth不是一个很大的安全漏洞。请参阅msdtc安全配置中使用不安全rpc无需身份验证设置的潜在风险
可以跨数据访问方法使用一个连接对象。这样就不会触发MSDTC。我有类似的经验,但没有权限调整SQL服务器。使用单例模式,我创建了数据连接,并在跨多个方法调用的事务中使用相同的连接对象。