Estou tentando desabilitar um trabalho de agente SQL de uma conta que é membro da função SqlAgentOperator (mas não sysadmin)
O doco diz que isso deveria ser possível
3 Os membros SQLAgentOperatorRole podem habilitar ou desabilitar tarefas locais que não possuem usando o procedimento armazenado sp_update_job e especificando valores para os parâmetros @enabled e @job_id (ou @job_name). Se um membro desta função especificar quaisquer outros parâmetros para este procedimento armazenado, a execução do procedimento falhará.
...e, de fato, o código para msdb.dbo.sp_update_job parece oferecer suporte a isso - ele tem tratamento explícito exatamente para esse cenário. No entanto, se eu executar:
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
... Estou tendo o erro a seguir:
Msg 229, Nível 14, Estado 5, Procedimento sp_update_job, Linha 1 A permissão EXECUTE foi negada no objeto 'sp_update_job', banco de dados 'msdb', esquema 'dbo'.
A mensagem de erro parece indicar que o proc nem está sendo executado, mas mesmo conceder EXECUTE explícito ao usuário nesse proc armazenado não parece corrigi-lo.
Alguém sabe como conceder a um usuário a capacidade de desabilitar/habilitar trabalhos do agente SQL que ele não possui ou usou com sucesso essa funcionalidade. Talvez esteja apenas quebrado no SQL 2012 SP1 CU4 (que é o que estou usando)
Verifique se há um DENY no procedimento sp_update_job. Isso pode ser um NEGADO direto ao seu login ou pode ser um NEGADO em algum grupo que tenha seu login como membro. NEGAR sempre supera uma concessão.
Nesse caso, remover seu login do grupo ou fazer com que um administrador REVOGUE a NEGAÇÃO deve resolver o problema.
Resposta solicitada pela leitura da solicitação de Piers7. O tempo passou, claro.
RLF estava certo - o usuário em questão também estava no msdb 'TargetServersRole', e essa função tem permissões explicitamente negadas nesse procedimento armazenado. Dó!
Infelizmente, fn_my_permissions não mostra DENYs (mostra o resultado - sem permissões), e o menu de propriedades do SSMS (e a guia de permissões) não será exibido para procs armazenados no sistema, ou eu teria percebido isso dias atrás.
[@RLF: Se você quiser promover seu comentário a uma resposta, vou marcá-lo como correto e remover este (supondo que eu possa)]
Editar: eu deveria ter usado isso para diagnosticar - saberei da próxima vez: