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