Минимальное разрешение на изменение задания агента SQL - PullRequest
0 голосов
/ 20 декабря 2018

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

1 Ответ

0 голосов
/ 20 декабря 2018

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

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

...