Eu gostaria de executar uma assinatura SSRS após algum trabalho ETL executado por um pacote SSIS que leva um tempo variável para ser concluído. Estou pensando em usar este método , que consiste basicamente em SSIS chamando o mesmo procedimento armazenado que os trabalhos do SQL Server Agent para chamadas de assinaturas para executar uma assinatura.
No entanto, não tenho certeza de qual seria a melhor maneira de gerenciar permissões para executar a assinatura. Por exemplo, estou relutante em adicionar usuários ao RsExecRole
porque isso é desencorajado pela Microsoft em alguns documentos, e estou relutante em conceder permissões de nível de objeto para executar o ReportServer.ado.AddEvent
procedimento porque eles provavelmente serão ignorados em qualquer migração. (Editar: suponho que poderíamos contornar isso fazendo com que algo execute o trabalho do agente em vez de chamar o procedimento armazenado.)
Também espero evitar problemas com o código que executa a quebra de assinatura quando um dos GUIDs é alterado.
Como os profissionais do SSRS gerenciam as permissões para esse tipo de solicitação? Como alternativa, existe um método mais simples que contorne esses problemas?
Se você configurar uma assinatura de relatório com um agendamento único e coletar sua ID de agendamento, poderá executá-lo usando sp_start_job. O SSRS gerencia as assinaturas com o SQL Server Agent, o que torna isso possível sem a necessidade de usar o Reporting Server Events. O usuário em execução, imagino uma conta de serviço, precisará apenas fazer parte do SQLAgentOperatorRole. Consulte: sp_start_job#permissions .
Você faz alusão a isso em uma edição em sua pergunta, mas gostaria de descrever o processo caso alguém precise de uma solução específica.
Configurar o cronograma é fácil. O horário padrão é 2h do dia em que você configurou o agendamento da assinatura e provavelmente já passou, então você pode deixá-lo. Em seguida, você pode coletar sua ID de agendamento consultando as tabelas do banco de dados do Report Server:
Você pode iniciar a assinatura referenciando o nome do trabalho correspondente ao seu ID de agendamento:
Ainda não tive um problema com a alteração de um Schedule ID (GUID) e interrupção da execução, mas como um sistema de segurança, você pode criar uma assinatura baseada em dados e declarar explicitamente uma descrição exclusiva.
Em seguida, você pode fazer referência à descrição para coletar seu ID de agendamento dinamicamente.