У меня есть агентское задание, которое выполняет пакет .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 ...), поскольку пользователь-владелец работает нормально.