SSRS Microsoft Reporting services-由于用户权限的原因,在创建报告过程中可能出现问题



我在生成报告时遇到了一个奇怪的问题,这就是场景:

创建了一个内部有两个图像的报告,这两个图像都是"外部"链接,具有两个不同的参数(img01和img02都是文本),指向SSRS数据库上的图像位置,如下所示:

img01-/images/img01.jpg
img02-/documents/images/img02.jpg

对于参数img01,定义了一个包含"链接"的默认值,对于img02,每次执行报告时都需要图像路径。

其想法是通过存储过程(xp_cmdshell)调用带有.rss配置文件的rs.exe命令,以将报告呈现为.pdf,这不是问题,因为我已经掌握了这部分的所有信息。

发生了什么。。。

a。如果我通过浏览器执行报告(ssrs界面,因此没有自动渲染),那么两个图像都会显示,如果我为img02插入了错误的路径,则红色的小"X"apperas

b。如果我从调用rs.exe命令的存储过程中获取字符串,并在CMD shell中启动它,则报告将在.pdf文件中生成,两个图像都将显示,如果我为img02插入了错误的路径,则红色的小"X"apperas

c。我启动了我的存储过程,所以现在xp_cmdshell负责运行rs.exe命令,此时报告在.pdf文件中生成,但只有img01(带有"默认链接"的)可见;img02如果路径正确或不正确,我总是有红色的"X"

-- command used
set @cmd = 'rs.exe -i C:try.rss -s http://url/reportserver -v img02=' + @img02 + ' -e Exec2005 -l 600'
insert @output (output) exec @rc = <database>..xp_cmdshell @cmd

[准确地说,点C的完整序列如下
1-以admin(sa)身份连接到数据库的php页面
2-存储过程的调用(rs.exe)
3-报告生成
我省略了php部分,因为无论是从php运行存储还是直接从management studio运行,结果都是一样的。]

我试图更改"rs.exe"上的安全权限,授予对"NT SERVICE\MSSQLSERVER"的完全访问权限,但没有任何更改。

我试着用"proxy_account"运行xp_cmdshell(不确定我是否以正确的方式做了所有的事情,我从来没有玩过这种东西,所有的"操作方法"似乎都有点粗略),但什么都没有改变。

如果有人对此事有任何想法,我们将不胜感激:)(如果这是一个潜在的安全威胁,至少我可以从某个地方开始)。

如果你需要更多的细节,或者我的描述中有一些粗略的地方,请告诉我,我会尽量做到更完整。

谨致问候,F.

由于您遇到的所有问题,我将放弃使用rs.exe。

相反,在报表管理器中,我会定义一个新计划(通过站点设置/计划)。

然后,我会为报告添加一个订阅,它以PDF格式呈现。我会将该订阅附加到之前定义的新时间表中。

然后我会更改存储过程,调用SSRS过程AddEvent,例如

-- Execute a Shared Schedule: DECLARE @ScheduleID UNIQUEIDENTIFIER DECLARE @ScheduleName AS VARCHAR(128) = 'My SharedSchedule Name' -- Get the Schedule identifier SET @ScheduleID = (SELECT ScheduleID FROM ReportServer.dbo.SCHEDULE WHERE NAME = @ScheduleName) -- pass the Schedule identifier to the Event insert procedure EXEC ReportServer.dbo.AddEvent @EventType='SharedSchedule', @EventData=@ScheduleID

参考:

http://www.sqlblog.nl/2013/10/dynamic-refresh-ssrs-cache-using-sql/

我终于找到了问题所在。所有未显示在报告中并通过"参数"传递的图像,其中使用外部源动态生成,然后通过存储过程上传到ssrs"Catalog"表。当我参数化将图像上传到ssrs数据库的所有信息时,我还需要指定一个字段来定义单个文件的安全属性。因此,如果(例如)管理员和访客可以浏览/编辑文件夹,但文件安全性仅为管理员设置,那么图像将不会显示在报告中,这基本上让我感到羞愧。ssrs数据库中引用此属性的列是报表数据库的"Catalog"表中包含的PolicyId"

最后,我所做的是用管理员和访客权限更改现有文件的安全属性,复制"PolicyId"列中生成的数字代码,每次创建此映像的存储过程运行时,我都会将此代码附加到字段中,保留文件的安全策略。

最新更新