Минимальное разрешение на изменение задания агента SQL

Мне нужно разрешение изменить работу других пользователей в SQL Server 2016 в среде разработчиков, но команда DBA говорит, что они не могут дать мне роль системного администратора. Так же, как и любой другой вариант, представленный без sysadmin, чтобы я мог изменять задания, созданные другими пользователями.

1 ответ

Прямо нет. Но вы можете попросить своих системных администраторов создать хранимую процедуру-оболочку, которая вызывает 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]

Кредиты для этого решения для Бориса Христова.

Другие вопросы по тегам