В предыдущем задании, которое я имел в качестве администратора базы данных III, наша команда отвечала за создание и обслуживание заданий агента SQL, выполняющих различные задачи по обслуживанию базы данных, и мы часто использовали стандартный мастер плана обслуживания, который поставляется с SSMS. Общая проблема, с которой мы столкнулись при сохранении этих заданий, связана с возможностью редактирования задания, если вы не являетесь ее владельцем. Для нас было стандартным создание задания и использование общей учетной записи dba, чтобы все dbas могли редактировать задание, но время от времени dba создавала работу, используя свою собственную учетную запись AD, а не стандартную dba. Это не вызвало у нас слишком много неудобств, потому что у нас, как администраторов баз данных, также были владельцы sysadmin, поэтому мы могли бы все равно отредактировать эту работу. Но это заставило меня задуматься. Был ли способ разрешить кому-то, кто не был владельцем задания, изменять работу, не предоставляя им слишком много привилегий, как предоставление им sysadmin?Можете ли вы редактировать задание в SQL-агенте, если вы являетесь владельцем или системным администратором?
1
A
ответ
1
Любой программист ООП знаком с концепцией переопределения метода. Это, по сути, та же идея, но переопределение системы, хранящейся в proc, с помощью специального хранимого процесса с одной строкой кода, которая позволяет достичь нашей цели.
Только члены sysadmin могут редактировать задания, которыми они не владеют. Если вы создадите копию dbo.sp_update_job как dbo.sp_update_job_override, но добавьте «Grant Execute On» в конце, вы можете ее переопределить.
Поместите эту строку кода в конец вашей копии dbo.sp_update_job.
GRANT EXECUTE ON [dbo].[sp_update_job_override] TO [SQLAgentOperatorRole]
Так что, если вы предоставляете пользователю SQLAGENTOPERATORROLE они смогут сделать этот вызов, и она будет успешно завершена.
USE msdb ;
GO
EXEC dbo.sp_update_job_override
@job_name = N'SampleJob',
@new_name = N'Sample Job New',
@description = N'Sample job for demonstration purposes.',
@enabled = 0 ;
GO
Редактировать ... Я нашел статью от Бориса Христова на эту тему.