sql server agent cmdexe:访问被拒绝

时间:2014-04-17 13:04:15

标签: sql-server-2008 cmd remote-access sql-agent-job

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

  1. 步骤类型是:操作系统(cmdExec)
  2. 命令:“\ xxxxxx \ c $ \ xxxxx \ xxxx \ xxxx.exe” 代理用户 - 我的登录
  3. 故障排除:

    1. 我在两个盒子(sql和exe盒子)上以我身份登录 - 没有问题
    2. 我通过运行访问包含exe的远程框 - 没有问题
    3. 我手动运行exe - 没有问题
    4. 运行SSIS或本地exes的所有其他步骤都使用代理帐户运行 - 没有问题
    5. 我更改了esql服务代理服务以使用localhost或我的信用 - 仍然看到问题
    6. 任何人都知道为什么我可以手动运行所有内容但是当我执行一个sql server代理作业只是在远程comp上运行一个exe它不会工作?

2 个答案:

答案 0 :(得分:1)

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

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

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

因此,对于您要访问的特定服务,set up constrained delegation 是正确的解决方法。这是一个真正的痛苦,但它是前进的唯一途径。与您的网络和域管理员讨论如何操作,他们必须参与(它只需要某些特权)并且他们知道如何操作。在Windows 2012中设置起来要容易得多,请参阅How Windows Server 2012 Eases the Pain of Kerberos Constrained Delegation, Part 1

答案 1 :(得分:1)

我实际上找到了一个令人满意的黑客攻击,这个攻击并不是无效的...... 我创建了一个由SQL代理触发的bat。 Bat文件触发了所需的exe。

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

bat文件内容

start \\xxxxxx\xxxxxx\xxxx.exe