Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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