SQL Agent作业修改最低权限要求

时间:2018-12-20 06:28:39

标签: sql-server-2016 jobs sysadmin sql-agent

我需要在开发环境中修改sql server 2016中其他用户作业的权限,但是DBA团队说他们不能给我sysadmin角色。在没有sysadmin的情况下,他们可以使用任何其他选项,以便我可以修改其他用户创建的作业。

1 个答案:

答案 0 :(得分:1)

直接,不。但是您可以要求系统管理员创建一个包装存储过程,该存储过程调用msdb.dbo.sp_update_job,具有相同的参数并以特权用户身份执行。然后授予您,或SQLAgentOperatorRole(如果每个人都不仅可以修改他的工作,还可以修改所有工作)的执行权。在下面的示例中,存储过程由所有者执行。假定其所有者将是sysadmin。如果需要,您可以更改此设置,例如,指定特定的登录名。

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]

The credits for this solution are for Boris Hristov