我想在完成需要不同时间的 SSIS 包运行的一些 ETL 工作后执行 SSRS 订阅。我正在考虑使用这种方法,它基本上由 SSIS 调用与订阅的 SQL Server 代理作业调用以执行订阅相同的存储过程组成。
但是,我不确定管理执行订阅的权限的最佳方式是什么。例如,我不愿意将用户添加到 中,RsExecRole
因为 Microsoft 在某些文档中不鼓励这样做,并且我不愿意授予对象级权限来执行该ReportServer.ado.AddEvent
过程,因为它们可能会在任何迁移中被忽略。(编辑:我想我们可以通过执行代理作业而不是调用存储过程来解决这个问题。)
我还希望避免在其中一个 GUID 更改时执行订阅中断的代码出现问题。
SSRS 专业人员如何管理此类请求的权限?或者,是否有更简单的方法可以绕过这些问题?
如果您使用一次性计划设置报告订阅并收集其计划 ID,则可以使用 sp_start_job 执行它。SSRS 使用 SQL Server 代理管理订阅,无需使用报告服务器事件即可实现这一点。执行用户,我想是一个服务帐户,只需要成为 SQLAgentOperatorRole 的一部分。请参阅:sp_start_job#permissions。
您在问题的编辑中提到了这一点,但我想概述该过程,以防其他人需要特定的解决方案。
设置时间表很容易。默认时间是您设置订阅计划的当天凌晨 2 点,并且可能已经过去,因此您可以离开它。 然后您可以通过查询报表服务器数据库表来收集您的计划 ID:
您可以通过引用与您的计划 ID 匹配的作业名称来启动订阅:
我还没有遇到计划 ID (GUID) 更改和中断执行的问题,但作为故障保险,您可以创建数据驱动订阅并明确声明唯一描述。
然后,您可以参考描述以动态收集您的计划 ID。