如何从存储过程启用SQL Server代理作业执行

时间:2019-04-05 13:37:35

标签: sql-server stored-procedures sql-agent-job

我有一个执行.dtsx程序包的代理作业。它需要从数据库用户拥有的存储过程中调用,并由应用程序使用并作为所有者执行。

已授予

代码:

DECLARE @return_value INT

EXEC    @return_value = [dbo].[rscc_drop_off_caller]

SELECT  'Return Value' = @return_value

我给了用户SQLAgentUserRole,并确认它已在sp_start_job上执行。

如果我跑步:

DECLARE @ReturnCode INT;

EXEC @ReturnCode = msdb.dbo.sp_start_job N'RSCC Push CCD To AIM';

PRINT @ReturnCode;

从SSMS中的窗口运行正常。

但是如果我跑步:

exec csisql.rscc_drop_off_caller; 

它失败并显示错误:

  

第229条消息,级别14,状态5,过程sp_start_job,第1行
  对对象'sp_start_job',数据库'msdb',模式'dbo'的EXECUTE权限被拒绝。

     

“ rscc_drop_off_caller”过程试图返回状态NULL,这是不允许的。而是返回状态0。

在授予权限后,我什至尝试删除并重新创建存储过程,但出现相同的错误。存储过程非常简单:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[rscc_drop_off_caller]
WITH EXECUTE AS OWNER
AS
DECLARE @ReturnCode int;

BEGIN
    EXEC @ReturnCode = msdb.dbo.sp_start_job N'RSCC Push CCD To AIM';
    RETURN (@ReturnCode); 
END

对不起,如果我提供了太多信息。我真的需要让这个工作正常,但我很沮丧。任何帮助将非常感激。预先感谢。

KT

总结:我需要能够从存储过程中调用代理作业。尽管作为拥有者的用户直接调用作业(exec ...)仍能正常工作,但这目前仍失败。

1 个答案:

答案 0 :(得分:0)

感谢您的帮助。我解决了这个问题。我修改了SP以使其作为调用者执行,并授予该DAimConnUser具体权限以执行存储过程。