繁体   English   中英

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

[英]How to enable SQL Server Agent job execution from stored procedure

我有一个执行.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 ...),因为拥有的用户工作正常,但目前仍然失败。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM