我有一个SSRS解决方案,其中包含20个报告,所有报告都利用一个称为“ DataWarehouse”的共享数据源。此数据源已配置为使用Windows身份验证。这些报告已部署到服务器。
我有一个要求,一旦数据仓库在一夜之间完成加载,就需要能够自动运行这些报告。有时仓库负载可能需要5个小时,有时可能需要10个小时,所以我不想使用报表服务在特定时间安排这些报表,我希望仓库负载确定何时完成并触发报表。
现在,我有一种机制可以做到这一点:
现在,如果我(在我自己的本地计算机上)运行SSIS包,则该包将成功执行,并生成并保存报告。当我将SSIS包部署到服务器并尝试通过代理作业运行它时,它失败并显示以下错误:
System.Web.Services.Protocols.SoapException: The permissions granted to user 'NT SERVICE\SQLSERVERAGENT' are insufficient for performing this operation. ---> Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: The permissions granted to user 'NT SERVICE\SQLSERVERAGENT' are insufficient for performing this operation.
at Microsoft.ReportingServices.Library.ReportExecution2005Impl.LoadReport (String Report, String HistoryID, ExecutionInfo2& executionInfo)
at Microsoft.ReportingServices.WebServer.ReportExecutionService.LoadReport (String Report, String HistoryID, ExecutionInfo& executionInfo)
我最初的猜测是,这意味着SSIS作业将以“ NT SERVICE \ SQLSERVERAGENT”的身份执行,并且该用户无权在报表服务器上运行报表。因此,我跳到报表服务器并尝试将NT SERVICE \ SQLSERVERAGENT添加为可以运行报表的用户,但仍然出现错误。有人可以帮我弄清楚如何使它正常工作吗? 谢谢
答案 0 :(得分:1)
这将帮助您在命令提示符下执行SSIS程序包,并且可以在批处理文件中的计划任务中在服务器上运行该程序包(您可能需要特殊权限才能在计划任务中运行批处理文件)。您将要做的是创建一个Windows批处理文件,以允许您通过命令提示符自动运行SSIS包,并且您将需要使用Dtexec。这是您的批处理文件的外观:
@ECHO OFF
Some comment about what the package is doing
Dtexec /f "C:\some\file\path\YourPackage.dtsx
然后,将记事本另存为Windows批处理文件后,便可以打开该批处理文件,它将在命令提示符下运行您的程序包。希望对您有帮助
答案 1 :(得分:0)
我编辑了控制台应用程序,以特定用户身份连接到SSRS服务器。我添加了以下内容,以防它对其他人有用。
为此,我创建了一个名为account.config的文件,该文件仅在第一行包含用户名,在第二行包含密码:
CREATE TRIGGER before_insert_on_blacklisted_ips BEFORE INSERT ON blacklisted_ips
FOR EACH ROW
SET NEW.allowed=NOW()+INTERVAL 1 HOUR;
然后在我的控制台应用程序中,我有以下代码:
MyUser
MyPassword