0

我想在远程计算机上运行 exe。我设置如下:

  1. 步骤类型为:操作系统(cmdExec)
  2. 命令:"\xxxxxx\c$\xxxxx\xxxx\xxxx.exe" 代理用户-我的登录

故障排除:

  1. 我在两个框(sql 和 exe 框)上以我的身份登录 - 没有问题
  2. 我通过运行访问包含 exe 的远程框 - 没有问题
  3. 我手动运行 exe - 没有问题
  4. 运行 SSIS 或本地 exe 的所有其他步骤都使用代理帐户运行 - 没有问题
  5. 我将 esql 服务代理服务更改为使用 localhost 或我的信用 - 仍然看到问题

任何人都知道为什么我可以手动运行所有内容,但是当我设置 sql server 代理作业以简单地在远程计算机上运行 exe 时它不会工作?

4

2 回答 2

1

这是预期的行为。当您在模拟上下文下对远程进行身份验证时,Kerberos 约束委派规则就会启动(又名“双跳”)。当您使用 Windows 身份验证连接到 SQL Server 时,您正在运行模拟上下文。当您使用 SQL 身份验证进行连接时,远程访问使用为该 SQL 登录配置的代理登录。

您所有的“成功”案例都落在没有双跳的一侧,或者有可以使用的代理用户。您所有的失败案例都是使用 Windows 身份验证登录的“双跳”(因此使用模拟,而不是代理用户)。

如上所述,这个问题真的很容易解决:将“\host\c$\path\program.exe”本地复制到您的 SQL 实例主机并在本地运行它(“c:\path\program.exe”)。除了避免双跳之外,还有更多原因。但是程序本身很可能需要远程访问,这触发约束委派。

因此,正确的解决方法是为您要访问的特定服务设置约束委派 。这是一个真正的痛苦,但它是唯一的出路。与您的网络和域管理员讨论如何操作,他们必须参与(这需要只有他们拥有的某些权限)并且他们知道如何操作。在 Windows 2012 中设置起来要容易得多,请参阅Windows Server 2012 如何缓解 Kerberos 约束委派的痛苦,第 1 部分

于 2014-04-17T13:22:13.033 回答
1

我实际上找到了一个令人满意的 hack,它并没有那么令人反感,以至于无效......我创建了一个由 SQL 代理触发的蝙蝠。Bat 文件会触发所需的 exe。

为什么这没有看到我不知道的相同访问问题,但我很高兴它没有:)

bat文件内容

start \\xxxxxx\xxxxxx\xxxx.exe
于 2014-04-17T17:49:51.587 回答