2

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

SQL Server 2008 R2 机器 (Windows Server 2008) 在域内。

当独立机器命中 TransactionScope 时,它​​会失败(将出现错误详细信息)。

当我从与数据库服务器位于同一域中的机器上运行代码时,它工作正常。

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

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

但是 MSDTC 设置正确,顺便说一下,它使用网络服务。DTCPing.exe 两种方式都可以正常工作。

在深入研究数据库机器后,我发现了以下审计失败:

帐户无法登录。

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 从独立机器工作到域机器?

PS 如果可能(如果有其他方法)我不想影响 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\TurnOffRpcSecurity' 注册表项。

PPS 如果可能的话,我想在 MSDTC 上保留相互身份验证,(我知道可能的解决方案是将 MSDTC 设置为不需要身份验证,但不确定这是否完全必要)

奇怪的是使用测试独立 Web 服务器到域 DB 服务器 MSDTC 无论设置为无身份验证还是相互身份验证都可以正常工作!:S

两台机器上的 PPS 防火墙均已关闭。

4

2 回答 2

1

啊,要是我早先尝试使用实时系统的副本等来设置测试就好了……

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

PS No Auth 在不向外界开放 MSDTC 机器/端口的环境中并不是一个安全漏洞。查看在 msdtc 安全配置中使用不安全 rpc no authentication required 设置的潜在风险

于 2013-04-29T09:54:33.650 回答
1

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

于 2013-05-05T09:32:20.443 回答