【问题标题】:SSRS 2005 Parameter Based SecuritySSRS 2005 基于参数的安全性
【发布时间】:2010-12-05 03:07:39
【问题描述】:

我在 A 公司工作。A 公司有一个姊妹公司 B。A 公司和 B 公司都使用相同的 ERP 数据库。我创建了一份可供两家公司使用的SSRS 2005 报告。它有一个 CompanyID 参数,用于确定是显示公司 A 还是公司 B 的数据。

对于大多数报告来说,这是可以的,但对于公司敏感信息(例如工资单),这将是一个问题,因为公司 A 的任何人都可以将 CompanyID 参数更改为公司 B 的 ID,反之亦然。

我最初的想法是在各自的文件夹 A 和 B 中为每个公司创建一个 linked report,其中文件夹 A 的安全性仅允许公司 A 用户和文件夹 B 安全性仅允许 B 用户。然后我会为每个链接的报表添加一个默认的 CompanyID 参数,并对用户隐藏这些参数。到目前为止,一切都很好。这样做的问题是您仍然可以使用 URL 查询字符串更改参数值。例如,公司 A 的用户可以将报告 url 更改为:

http://server/ReportServer/ReportViewer.aspx?/Payroll/A&rs:Command=Render

到:

http://server/ReportServer/ReportViewer.aspx?/Payroll/A&rs:Command=Render&CompanyID=B

现在他们已经完全绕过了隐藏的默认参数。

有什么好的方法可以解决这个问题?如果可能的话,我想在两家公司之间共享报告。

更新: 我们还有公司特定的 ASP.NET 内部网,它们已经通过 AD 域限制了基于公司的访问。我想我可以使用 Intranet 页面上的ReportViewer 控件在运行时应用适当的参数。我可能可以将此逻辑合并到可用于任何报告的通用报告页面中,对吗? (请原谅我的无知,我完全是SSRS n00b)

【问题讨论】:

    标签: asp.net security reporting-services reportingservices-2005


    【解决方案1】:

    你这里的安全设备是什么?在我看来,一个可靠且安全的解决方案是根据用户帐户驱动对数据的访问。报告数据是如何收集的?是直接在你的数据集中选择吗?你在调用程序吗?选择视图?

    编辑:由于您选择的是联合各个公司数据的视图,如果您将视图的权限授予具有访问权限的用户或角色,您可能能够创建将数据返回给用户的场景基于他们的权利。

    【讨论】:

    • 它是从一个视图中选择的,该视图从两个公司的表中选择并全部联合。
    • 如果我们将联合视图拆分为两个单独的视图,我们可能可以使用数据库角色仅授予对适当公司视图的选择权限。这就是你所暗示的吗?
    • 是的,这应该创建一种只获取适当数据的透明方式。
    【解决方案2】:

    您可以使用Expression Based Connection Strings 以不必使用链接报告,但这仍然意味着将信息作为参数传递,该参数将在 GET 请求中公开。

    您必须区分要为谁显示/运行报告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多