在我以前作为数据库管理员III的工作中,我们的团队负责创建和维护运行各种数据库维护任务的SQL代理作业,我们经常使用SSMS附带的标准维护计划向导。 如果您不是所有者,我们在维护这些工作时遇到的一个常见问题与编辑工作的能力有关。我们创建作业并使用常见的dba帐户是标准的,这样所有dbas都可以编辑作业,但dba会不时使用自己的个人AD帐户而不是标准dba创建作业。这并没有给我们带来太多不便,因为我们作为DBA也拥有系统管理员权限,所以我们无论如何都可以编辑这份工作。但这让我思考。有没有办法让那些不是工作所有者的人能够修改工作而不给予他们太多特权,比如给他们系统管理员?
答案 0 :(得分:1)
任何OOP程序员都熟悉覆盖方法的概念。这基本上是相同的想法,但覆盖了系统存储过程与自定义存储过程与一行代码,以实现我们的目标。
只有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
编辑......我在这个主题上找到了鲍里斯·赫里斯托夫的一篇文章......谢谢鲍里斯。