运行SqlAgent作业时的权限问题

时间:2017-08-09 06:05:54

标签: sql-server permissions sql-server-2016 sysadmin sql-agent-job

当我尝试运行Sql代理程序作业时,我正在检查是否有同时运行的先前实例。查询如下:

IF NOT EXISTS(SELECT
                            1
                        FROM msdb.dbo.sysjobactivity ja 
                        LEFT JOIN msdb.dbo.sysjobhistory jh 
                            ON ja.job_history_id = jh.instance_id
                        JOIN msdb.dbo.sysjobs j 
                        ON ja.job_id = j.job_id
                        JOIN msdb.dbo.sysjobsteps js
                            ON ja.job_id = js.job_id
                            AND ISNULL(ja.last_executed_step_id,0)+1 = js.step_id
                        WHERE ja.session_id = (SELECT TOP 1 session_id FROM msdb.dbo.syssessions ORDER BY agent_start_date DESC)
                        AND j.name = N'JobName' 
                        AND start_execution_date is not null
                        AND stop_execution_date is null
                 )
                BEGIN   
                -- code to run the job
                END

但是,我收到错误

  

对象' syssessions',数据库' msdb',架构' dbo'拒绝了SELECT权限。 [SQLSTATE 42000](错误229)。

步骤失败。作业步骤由具有sysadmin权限的帐户运行。

我也尝试在db_owner数据库中为该帐户授予msdb权限。仍然,面临同样的问题。

有关如何解决此许可问题,请指导我吗?

1 个答案:

答案 0 :(得分:1)

我认为您不需要手动检查是否有其他实例正在运行。

示例作业的步骤:

SELECT 1;
WAITFOR DELAY '00:00:45';

尝试运行两次:

EXEC msdb.dbo.sp_start_job 'job'
-- Job 'job' started successfully.

EXEC msdb.dbo.sp_start_job 'job'
  

Msg 22022,Level 16,State 1,Line 3

     

SQLServerAgent错误:    请求运行作业Job()被拒绝,因为该作业已经从<>的请求中运行。