.Net - 当SQL Server位于另一个VM

时间:2016-08-14 23:49:59

标签: c# sql-server wmi biztalk

我创建了一个Windows服务,用于监视接收位置并使用WMI ManagementScope类范围发送端口事件,即本地BizTalk服务器计算机的启动/停止/启用/禁用/登记/未列出:

string strScope = @"\\.\root\MicrosoftBizTalkServer";

但是当我尝试使用以下命令指向远程机器/服务器来捕获事件时

string strScope = string.Format(@"\\{0}\root\MicrosoftBizTalkServer", node.Address);

我收到奇怪的WMI错误。我试图指出的典型远程机器是一个类似的Windows服务器,其中一个很小的区别是它的BizTalk服务器指向位于网络中另一台服务器上的SQL服务器。

经过大量的谷歌搜索和搜索,我发现信息指出可能的失败原因是经典" Double-hop"当我们尝试在其SQL服务器位于另一台计算机上时访问远程BizTalk服务器时发生的问题。

在visual studio中,我没有获得有关我尝试使用Windows内置工具的错误的足够信息" wbemtest.exe"解决正在发生的事情只是为了发现一个很长的错误消息,如:

  

BizTalk Server无法访问SQL Server。这可能是由于以下原因之一:       \ N1。已拒绝当前用户的访问权限。以已被授予SQL权限的用户身份登录并重试,或授予当前用户访问SQL Server的权限。       \ N2。 SQL Server不存在或指定了无效的数据库名称。检查为SQL Server和数据库输入的名称,以确保它们在SQL Server安装期间提供的正确。       \ N3。 SQL Server存在,但当前未运行。使用Windows服务控制管理器或SQL企业管理器启动SQL Server,然后重试。       \ N4。 Microsoft SQL Server数据文件夹中已存在与指定数据库同名的SQL数据库文件。       \ n       \ n来自OLEDB提供商的内部错误:\"登录失败,因为用户&n; NT AUTHORITY \ ANONYMOUS LOGON'。\""

我尝试过使用管理服务下的防火墙和DCOM设置 - >组件服务但没有任何设置可以让我通过"模拟"传递我的用户凭据。并检索回接收位置/发送端口信息。

请分享实际解决此问题的变通方法/解决方案/配置设置。

2 个答案:

答案 0 :(得分:1)

经过大量研究和深入研究后,解决方案是通过为非域管理员启用/配置Kerberos身份验证来实现的。服务帐户用户和通信中涉及的机器,即客户端(机器发送基于WMI的请求),Biztalk节点(响应基于WMI的请求的机器)和SQL Server节点(机器托管/运行SQL Server数据库引擎服务,最重要的是Biztalk的数据库,包括消息框,跟踪,管理和SSO)。

这都是在单个域下完成的,并且为Biztalk节点和SQL Server节点设置了委派以及使用的服务帐户。

为服务帐户授予了DCOM权限,以便设置WMI和DTC(分布式事务处理协调器)权限。

生成了适当的SPN,并为在委派模式下发起WMI请求的服务帐户授予了适当的SQL Server权限。

使用以下SQL查询验证是否为特定服务帐户启用了Kerberos:

  

从sys.dm_exec_connections中选择session_id,net_transport,client_net_address,auth_scheme

答案 1 :(得分:0)

这只是一个双跳问题,您遇到的问题是因为您正在尝试运行服务并访问远程服务器BizTalk服务器,然后尝试登录到远程SQL服务器。您的凭据只能到达BizTalk服务器,但BizTalk服务器不会将您的凭据传递给另一台服务器。

请参阅此链接以获取解决方案 Similar Issue