如何保护 SharePoint 共享 SSRS 数据源

How to secure SharePoint Shared SSRS Datasources

我有一个大型报告 SharePoint 网站,其中包含大约十几个不同的共享数据源连接,每个连接都指向不同的 SQL 服务器,网站上托管的 SSRS 报告正在使用该服务器。每个数据源都有一个缓存帐户,用于在报告 运行 时检索数据,这样报告读者就不必拥有对我们所有 SQL 数据库的读取权限。

当拥有报告创建权限的人创建报告时,他们可以 select 托管在网站上的共享数据源之一,但必须先通过身份验证弹出窗口才能真正编写查询针对数据库:

当前使用的策略是我们的作者确实具有对 SQL 数据库的读取权限并使用该身份验证(使用当前 Windows 用户)创建报告,然后在他们保存时在报告中,读者使用存储在共享数据源中的帐户。然后,我们通过 SharePoint 安全管理对报告中数据的访问,只允许应该看到该数据的人访问报告。

这对我来说似乎很标准...但是

我能够查询任何共享数据源都可以访问的任何数据库,而不管我自己的权限如何,只需按照以下步骤进行一些 rdl 定义操作:

1) 当前帐户需要访问报告生成器和 AD 访问至少一个 SQL 数据源(使事情变得更容易)

2) 将共享数据源添加到我有权访问的报告中

3) 使用遵循此格式 SELECT '' as Field1 FROM DBNAME

的查询添加数据集

4) 将 table 添加到仅显示查询中的 Field1 的报表中

5) 添加我无权访问的共享数据源之一(没有阻止我将共享连接添加到报告,我只是无法使用报告生成器创建数据集)数据源)

6) 在 SharePoint 站点上保存报告,然后将副本下载到本地计算机

7) 打开rdl定义。将 SQL 查询的数据源替换为 "unauthorized" 数据源的名称(可以删除原始数据源)。将 SQL 查询替换为在数据库中查询 table 名称列表的查询 (SELECT name as Field1 FROM sys.Tables)

8) 将报告定义上传回 SharePoint 和 运行 报告

该报告现在使用缓存的帐户,我已经绕过了使用报告生成器会提供的良好授权 window。通过使用 sys 查询,我可以找到数据库、tables、列以及最终的数据,而无需了解有关数据库的任何信息。我可以通过阻止访问 master 数据库来减慢此方法的速度,这样就无法检索数据库列表,但这是次要的,不是完整的解决方案。

选项: - 可以在数据库级别强制实施安全性,但是我不希望报告读者拥有针对我的任何源数据库的权限。虽然每个报告都可以从一个视图中获取,然后单独控制以防止访问报告显示以外的任何内容,但这将是无法控制的 - 强制每个报告使用嵌入式连接而不是共享连接。这在将来移动服务器或我们需要知道哪些报告正在使用特定连接时很难管理(数据源下拉菜单中提供了相关项)

我觉得我在这里遗漏了一些明显的东西,因为这似乎完全违背了托管共享数据源的目的。

共享数据源的优势在于管理,因为它们减少了更改数据源连接详细信息(例如密码和服务器名称)的开销。正如您所指出的,使用共享数据源还可以让您轻松识别相关报告。

但是,共享数据源不是一种保护数据源(例如数据库)的机制。确实需要在数据库级别解决安全问题,以正确确保只有授权人员才能访问。如果凭据存储在报表数据源中,那么任何能够访问该数据源或在报表中引用它的人都将能够在连接上执行查询。

我认为问题出在这一步:

5) Add one of the shared data sources that I should have no access to (there is no stopping me from adding the shared connection to the report, I simply am unable to use report builder to create a dataset using that data source)

应该有一些方法来防止报表设计者看到他们没有权限的共享数据源。您可能需要为每个项目设置单独的权限,或将它们放在不同的位置以允许使用正确的权限保护它们。我不是 Sharepoint 专家,所以这只是一个建议。