Напрямую, нет.Но вы можете попросить своих системных администраторов создать хранимую процедуру-оболочку, которая вызывает msdb.dbo.sp_update_job
, имеет те же параметры и выполняется как привилегированный пользователь.А затем предоставить вам или SQLAgentOperatorRole
(если каждый сможет изменить не только свою работу, но и все) права на ее выполнение.В приведенном ниже примере хранимая процедура выполняется владельцем.Предполагается, что его владельцем будет системный администратор.При необходимости вы можете изменить это и, например, указать вместо этого конкретный логин.
USE msdb
GO
CREATE PROC [dbo].[sp_update_job_for_non_admins]
@job_id UNIQUEIDENTIFIER = NULL,
@job_name sysname = NULL,
@new_name sysname = NULL,
@enabled TINYINT = NULL,
@description NVARCHAR(512) = NULL,
@start_step_id INT = NULL,
@category_name sysname = NULL,
@owner_login_name sysname = NULL,
@notify_level_eventlog INT = NULL,
@notify_level_email INT = NULL,
@notify_level_netsend INT = NULL,
@notify_level_page INT = NULL,
@notify_email_operator_name sysname = NULL,
@notify_netsend_operator_name sysname = NULL,
@notify_page_operator_name sysname = NULL,
@delete_level INT = NULL,
@automatic_post BIT = 1
WITH EXECUTE AS OWNER
AS
BEGIN
EXEC dbo.sp_update_job
@job_id
,@job_name
,@new_name
,@enabled
,@description
,@start_step_id
,@category_name
,@owner_login_name
,@notify_level_eventlog
,@notify_level_email
,@notify_level_netsend
,@notify_level_page
,@notify_email_operator_name
,@notify_netsend_operator_name
,@notify_page_operator_name
,@delete_level
,@automatic_post
END
GO
GRANT EXECUTE ON [dbo].[sp_update_job_for_non_admins] TO [SQLAgentOperatorRole]
Кредиты для этого решения предназначены для Бориса Христова .