2015-09-01 3 views
1

В предыдущем задании, которое я имел в качестве администратора базы данных III, наша команда отвечала за создание и обслуживание заданий агента SQL, выполняющих различные задачи по обслуживанию базы данных, и мы часто использовали стандартный мастер плана обслуживания, который поставляется с SSMS. Общая проблема, с которой мы столкнулись при сохранении этих заданий, связана с возможностью редактирования задания, если вы не являетесь ее владельцем. Для нас было стандартным создание задания и использование общей учетной записи dba, чтобы все dbas могли редактировать задание, но время от времени dba создавала работу, используя свою собственную учетную запись AD, а не стандартную dba. Это не вызвало у нас слишком много неудобств, потому что у нас, как администраторов баз данных, также были владельцы sysadmin, поэтому мы могли бы все равно отредактировать эту работу. Но это заставило меня задуматься. Был ли способ разрешить кому-то, кто не был владельцем задания, изменять работу, не предоставляя им слишком много привилегий, как предоставление им sysadmin?Можете ли вы редактировать задание в SQL-агенте, если вы являетесь владельцем или системным администратором?

ответ

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 

Редактировать ... Я нашел статью от Бориса Христова на эту тему.