Granulando o acesso ao SQL Server Agent!


Olá pessoal! Tudo certo? Espero que sim!

Hoje vou falar de algo que surgiu no SQL Server 2005, as regras de controle de acesso ao SQL Server Agent implementadas na base de dados MSDB, estas permitiram aos administradores um controle maior sobre quem pode visualizar os jobs, seus logs, executá-los etc.

Na prática...

1. Com um usuário sysadmin, criem um novo login chamado loginteste e não deem nenhuma permissão para ele, criem também um job qualquer com uma step que contenha alguma comando simples em T-SQL, chamem este job de TESTE_JOB. Acessem o SQL Server com este novo login e notem que o SQL Server Agent no Management Studio nem aparece:

2. Novamente com um usuário sysadmin entrem nas propriedades do login que criamos e agora, em User Mapping, selecionem a base de dados MSDB e na lista das roles da base, selecionem uma chamada SQLAgentReaderRole:

3. Agora, voltem a se logar na instância com o login loginteste, notem que agora o SQL Server Agent já aparece:

4. Se tentarem ver o histórico do job também será possível:

5. Agora, se vocês entrarem dentro do job e tentarem editar as steps existentes, notem que os botões para isso vão estar desativados com exceção do de visualização:

6. Se vocês tentarem executar o job, também não será possível:

7. Clicando na mensagem de erro em azul temos o seguinte:

8. Antes de falarmos em como fazer para que nosso usuário além de visualizar informações de determinado job consiga também executá-lo, voltem ao mapeamento de permissões dele e notem que a permissão SQLAgentUserRole foi marcada automaticamente:  

Mas por qual razão? Bom, a SQLAgentUserRole é a permissão mais fraca dentre as três existentes, desta forma, membros das outras permissões são automaticamente membros dela.

9. Finalmente vamos fazer com que nosso usuário consiga também executar os jobs. Entrem novamente com um usuário que seja sysadmin na instância, depois, nas propriedades do nosso login de teste, em User Mapping, selecionem a role SQLAgentOperatorRole

10. Agora, novamente com o login de teste que criamos executem o job e vejam que desta vez será possível:

11. É isso pessoal, isto pode ser muito útil quando vocês quiserem granular o acesso de alguém ao SQL Server Agent!  Espero ter ajudado de alguma forma! Um abraço!

Links de referência:

5 comentários:

  1. Boa Tarde André,

    Muito bacana o assunto do post.

    Qual o owner do Job utilizado para realizar o teste de execução? Se não me engano, se o owner for diferente, o usuário não consegue rodar o job sem ser sysadmin.

    ResponderExcluir
    Respostas
    1. Fala Fabricio! Obrigado por ler ao post. Mesmo com outro owner o usuário consegue rodar o job.

      Abraço!

      Excluir
    2. Blz. Fiz o teste aqui e funcionou mesmo.

      Obrigado.

      Excluir
    3. O usuário consegue executar, mas não consegue alterar o job (schedule, notificação e etc)... Me confundi.

      Para modificar o job de outro owner só sendo sysadmin.

      Excluir