3

我的问题更多地涉及其实施的安全性,而不仅仅是技术问题。通过参数+安全的数据源

我已经开发了所有的报告,并在报告服务器上。它们由应用程序使用ASP.NET中的ReportViewer控件使用。

鉴于这些报告可能具有不同的数据源,我在报告中为数据源创建了一个参数,并将connectionString应用程序作为参数发送给报告。

到目前为止一切都很好,但是,这是我的问题出现的地方。由于我花费了一个ConnectionString,它具有参数的用户名和密码,我不会在这里遇到安全漏洞?

我想征求你的意见,如果有人有更好的实施方式,告诉我。

回答

7

也许Expression-Based Connection Strings会有帮助吗?

的文档有一个很清楚的例子,即类似于连接字符串:

="data source=" & Parameters!ServerName.Value & ";initial catalog=AdventureWorks 

这允许你仍然可以通过参数来定义数据源,但它也可以让你单独存储凭据,以便这种方式在调用报告时不一定要通过任何安全细节。

添加评论后:

下面是一个例子报告与基于表达式的连接字符串。

enter image description here

你可以看到连接字符串使用一个参数来确定究竟在何处的连接;这可以根据需要进行更新。

凭证存储在数据源中;您可以存储凭证(请参阅上面的屏幕截图),或者您可以选择任何适合的其他选项,例如Windows集成安全性。

因此,它可能不适合你,但这是内置的SSRS功能,用于这种可配置的数据源要求。

第二个编辑:

在上面的例子中,Parameters!ServerName.Value确实是一个报表参数,你只需创建它像任何其他。根据报告的启动方式,您可以将其设置为隐藏参数并处理代码中发送的实际值;这只是一个实施问题,真的取决于你。

对于基于表达式的连接字符串,数据源必须存储在报表中,并且其连接字符串在运行时确定。

因此,您可以根据一个或多个参数来构建您需要的任何内容 - 这只是您构建的字符串值,因此您可以根据自己的目的制作任何内容;您可以将其指向所需的任何服务器/数据库组合。请澄清,如果这不能回答你的问题。

+0

但是,我把凭据? – PookPook 2013-02-11 12:51:10

+0

这些存储在数据源级别;看到上面的编辑。 – 2013-02-11 13:02:12

+0

好,很好。但是“Parameters!ServerName.Value”必须在报告中声明?我该如何设置报表的数据源,以便获取serverreport上的数据源?两者之间的联系,我不明白。 – PookPook 2013-02-11 13:21:47