Как включить выполнение задания агента SQL Server из хранимой процедуры - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть агентское задание, которое выполняет пакет .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
Отказано в разрешении EXECUTE для объекта 'sp_start_job', базы данных 'msdb', схемы 'dbo'.

Процедура '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 голосов
/ 05 апреля 2019

Спасибо за помощь. Я решил проблему. Я изменил SP для выполнения в качестве вызывающего и предоставил конкретное разрешение этому DAimConnUser для выполнения хранимой процедуры.

...