我正在尝试从 SqlAgentOperator 角色成员(但不是系统管理员)的帐户中禁用 SQL 代理作业
doco说这应该是可能的
3 SQLAgentOperatorRole 成员可以启用或禁用他们不拥有的本地作业,方法是使用存储过程 sp_update_job 并指定 @enabled 和 @job_id(或 @job_name)参数的值。如果此角色的成员为此存储过程指定任何其他参数,则该过程的执行将失败。
...实际上 msdb.dbo.sp_update_job 的代码似乎支持这一点——它对这种情况有明确的处理。但是,如果我运行:
use [MSDB]
go
select suser_sname()
if(is_member('SqlAgentOperatorRole')<>1)
raiserror('Not in required role',16,1)
go
exec dbo.sp_update_job @job_name='a job', @enabled=0
...我收到以下错误:
消息 229,级别 14,状态 5,过程 sp_update_job,第 1 行 对对象“sp_update_job”、数据库“msdb”、架构“dbo”的 EXECUTE 权限被拒绝。
该错误消息似乎表明该过程甚至没有运行,但即使授予该用户对该存储过程的显式 EXECUTE 似乎也无法修复它。
有谁知道如何授予用户禁用/启用他们不拥有或已成功使用此功能的 SQL 代理作业的能力。也许它只是在 SQL 2012 SP1 CU4(我正在使用的)中被破坏