2015-09-01 31 views
1

在作为数据库管理员III的前一份工作中,我们的团队负责创建和维护运行各种数据库维护任务的SQL代理作业,我们通常会使用SSMS附带的标准维护计划向导。 我们在维持这些工作时遇到的一个常见问题与编辑作业的能力有关,如果您不是所有者。我们创建这个工作是标准的,并且使用一个通用的dba账户,这样所有的dbas都可以编辑这个工作,但是dba会不时使用他们自己的个人AD账户创建工作,而不是使用标准dba。这不会给我们造成太多不便,因为作为DBA,我们也拥有系统管理员权限,所以我们无论如何都可以编辑这项工作。但是这让我思考。有没有办法让一个不是工作所有者的人能够修改这个工作而不给他们太多的特权,比如给他们系统管理员?如果您不是所有者或系统管理员,您可以在SQL Agent中编辑作业吗?

回答

1

任何OOP程序员都熟悉覆盖方法的概念。这基本上是相同的想法,但用一行代码来覆盖系统存储的proc和一个自定义的存储过程,以实现我们的目标。

只有sysadmin的成员能够编辑他们不拥有的作业。 如果您将dbo.sp_update_job的副本创建为dbo.sp_update_job_override,但在末尾添加'授予执行',您可以覆盖它。

将这行代码放在您的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 

编辑...我发现一篇文章来自鲍里斯Hristov在这个主题..感谢鲍里斯。

相关问题