[Administração] Permissões para manter Jobs do SQL Server Agent

Recentemente um cliente solicitou apoio para limitar as ações dos usuários que podem visualizar os jobs do SQL Server Agent. O objetivo do cliente era permitir que esses usuários somente pudessem visualizar, iniciar ou parar os jobs de uma instância.
O SQL Server Agent possui 3 database roles no banco MSDB. Segue um resumo dos principais acessos de cada uma delas:

  • SQLAgentUserRole: permite criar/modificar/apagar/visualizar/executar/parar/habilitar/desabilitar os jobs que o usuário é owner;
  • SQLAgentReaderRole: permite criar/modificar/apagar/executar/parar/habilitar/desabilitar jobs que o usuário é owner. Permite também a visualização dos jobs de outros owners, porém não é possível editar/executar/parar/alterar schedule dos jobs de outros owners;
  • SQLAgentOperatorRole: permite criar/modificar/apagar/executar/parar/habilitar/desabilitar jobs que o usuário é owner; além disso permite executar/parar/habilitar/desabilitar/alterar schedule dos jobs de outros owners.

Para ver todas os detalhes e permissões de cada uma das database role citadas, consulte a documentação:
/en-us/sql/ssms/agent/sql-server-agent-fixed-database-roles

No cenário do cliente a role SQLAgentOperatorRole era a mais adequada; porém o cliente não queria que os usuários desta role tivessem permissão para executar qualquer outra operação (por exemplo: habilitar/desabilitar/criar/etc).

A solução mais simples nesse cenário foi manter o usuário na role SQLAgentOperatorRole e negar a permissão de execução nas procedures sp_update_job, sp_update_schedule e sp_purge_jobhistory  no banco MSDB; dessa forma o usuário continuou com as permissões necessárias para acessar o Job Activity Monitor, visualizando o status de qualquer job da instância e se preciso iniciar/parar a execução dos jobs, porém, sem a possibilidade de habilitar/desabilitar/alterar schedule/etc.

Silas