通过另一个作业远程执行SQL Server作业

时间:2014-09-03 14:20:54

标签: sql-server sql-server-2008-r2

过去这个命令可行:

EXEC [linkedServerName].msdb.dbo.sp_start_job @job_name = 'test2'

现在我必须使用模拟登录并将调用服务器的SQL服务帐户(在本地登录中引用到impersonate)添加到被叫服务器并赋予它SA权限:认为我做错了,它不应该这样应该复杂吗?

如果没有添加到远程服务器的模拟帐户的SA权限,我收到错误:

  

对象'sp_start_job',数据库'msdb',架构'dbo'上的EXECUTE权限被拒绝。

谢谢

1 个答案:

答案 0 :(得分:1)

  

应该不应该这么复杂吗?

这并不比你正在做的任务复杂得多。这是非常基本的安全性。如果您希望帐户能够在服务器上执行操作,则该帐户需要具有对该服务器的适当访问权限。我不确定你为什么认为应该这样。设置代理帐户并不是最直接的,但是从远程服务器而不是本地代理调度作业也不是最直接的任务。

每个the doc用户需要成为sysadmin,SQLAgentUserRole,SQLAgentReaderRole或SQLAgentOperatorRole的成员才能调用sp_start_job

另一种方法是configure the linked server使用固定的安全上下文或映射安全上下文而不是模拟安全上下文。这可以在the Security page链接服务器属性上配置。请注意,用于固定上下文的帐户仍需要是上述角色之一的成员才能执行sp_start_job