我有一个执行.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 ...)仍能正常工作,但这目前仍失败。
答案 0 :(得分:0)
感谢您的帮助。我解决了这个问题。我修改了SP以使其作为调用者执行,并授予该DAimConnUser具体权限以执行存储过程。