[英]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.