首页 文章

如何保护SharePoint共享SSRS数据源

提问于
浏览
0

我有一个大型报表SharePoint网站,其中包含大约十二个不同的共享数据源连接,每个连接都指向由站点上托管的SSRS报告使用的不同SQL服务器 . 每个数据源都有一个缓存帐户,用于在报表运行时检索数据,以便报表读者不必具有对所有SQL数据库的读取权限 .

当具有报表构建权限的人创建报表时,他们可以选择网站上托管的一个共享数据源,但必须先通过身份验证弹出窗口,然后才能实际针对数据库编写查询:

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

This seems all very standard to me...however

通过以下步骤,我可以查询任何共享数据源有权访问的任何数据库,无论我自己的权限是否有一些rdl定义操作:

1)当前帐户需要访问报表生成器和AD访问至少一个SQL数据源(以简化操作)

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

3)添加一个数据集,其查询遵循此格式SELECT''作为Field1 FROM DBNAME

4)在报表中添加一个表,只显示查询中的Field1

5)添加一个我无权访问的共享数据源(没有阻止我将共享连接添加到报表中,我根本无法使用报表生成器来创建使用该数据源的数据集)

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

7)打开rdl定义 . 将SQL查询的数据源替换为“未授权”数据源的名称(可以删除原始数据源) . 将SQL查询替换为查询数据库以获取表名列表的SQL查询(SELECT名称为Field1 FROM sys.Tables)

8)将报表定义上载回SharePoint并运行报表

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

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

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

1 回答

  • 0

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

    但是,共享数据源不是保护数据库等数据源的机制 . 确实需要在数据库级别解决安全问题,以确保只有经过授权的人员才能访问 . 如果凭据存储在报表数据源中,则任何能够访问该数据源或在报表中引用它的人都将能够对连接执行查询 .

    我认为问题出在这一步:

    5)添加一个我无法访问的共享数据源(没有阻止我将共享连接添加到报表中,我根本无法使用报表生成器来创建使用该数据源的数据集)

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

相关问题