Минимальное разрешение на изменение задания агента 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]