我有一组使用存储过程的 SSRS 报告,我想向某人提供仅查看报告的访问权限。我相信这可以通过分配用户/组“浏览器”SSRS 角色来完成。但它不起作用。
只能通过授予/拒绝对底层存储过程的 EXECUTE 权限来授予/拒绝报告访问权限。
我在这里错过了什么吗?如果以上是真的,那么SSRS角色的意义何在。
我有一组使用存储过程的 SSRS 报告,我想向某人提供仅查看报告的访问权限。我相信这可以通过分配用户/组“浏览器”SSRS 角色来完成。但它不起作用。
只能通过授予/拒绝对底层存储过程的 EXECUTE 权限来授予/拒绝报告访问权限。
我在这里错过了什么吗?如果以上是真的,那么SSRS角色的意义何在。
数据源权限不同于报表访问权限。
SSRS 角色确实控制用户是否可以访问报告。报表数据源很可能设置为将用户凭据传递给数据库,从而传递给存储过程;这就是为什么您也需要在该级别设置权限的原因。
如果用户无权访问报告,他们将无法运行它们,甚至不会发生数据库访问。
要以不同的方式看待它,请考虑一个报告,其中凭据存储在数据源中,而不仅仅是使用 Windows 身份验证传递。这意味着运行报告的任何用户都将使用这些存储的凭据连接到数据库,而不是像他们自己一样。您只需要担心数据源凭据的数据库权限。您仍然需要能够授予/拒绝对报告的访问权限,这就是报告访问权限会产生影响的地方。
评论后编辑:
您已经提到了两种情况,一种是数据源设置为存储数据库用户凭据,另一种是数据源数据库访问设置为使用运行报表的任何人的凭据。
在这两种情况下,您都可以在报表服务器级别控制对报表本身的访问。
因此,如果您直接在报告级别或更高级别授予Domain\User1浏览器角色,他们可以访问报告。由于没有设置访问权限,Domain\User2无法运行报告。
现在已经设置了报告权限,您需要考虑如何设置数据源。
当凭据存储在数据源中时,您只需考虑该用户的数据库权限。假设您已将数据源设置为以Domain\ReportUser连接到数据库- 只有该用户需要访问底层存储过程。Domain\User1不访问数据库,因此不需要EXECUTE
这些对象;只有Domain\ReportUser可以。
当不存储凭据时,数据源数据库访问将由运行报表的用户执行,因此在这种情况下,当Domain\User1运行报表时,他们还将运行底层存储过程,因此需要EXECUTE
对象的权限.
在这两种数据源方案中,Domain\User2都无法访问报表,因为报表权限因此数据库权限无关紧要。