我有一组使用存储过程的SSRS报告,我想向某人提供报告的仅视图访问权限。我认为这可以通过分配用户/组"浏览器"SSRS角色来完成。但是这行不通。
对报表的访问权限的授予/拒绝只能通过对底层存储进程的EXECUTE权限的授予/拒绝来实现。
我错过了什么吗?如果以上是正确的,SSRS角色的意义是什么?
数据源权限与报表访问权限不同。
SSRS角色控制用户是否可以访问报表。报告数据源很可能被设置为将用户凭据传递给数据库,从而传递给存储过程;这就是为什么你也需要在那个级别设置权限。
如果用户没有访问报告的权限,他们将无法运行报告,甚至不会发生数据库访问。
从另一个角度来看,考虑一个报告,其中凭据存储在数据源中,而不仅仅是使用Windows身份验证通过。这意味着任何运行报告的用户都将使用这些存储的凭据连接到数据库,而不是以自己的身份。您只需要担心数据源凭据的数据库权限。您仍然需要能够授予/拒绝对报表的访问权限,这就是报表访问权限将起作用的地方。
注释后编辑:
您已经提到了两个场景,其中一个场景将数据源设置为存储数据库用户凭据,另一个场景将数据源数据库访问设置为使用正在运行报告的任何人的凭据。
在这两种情况下,您都可以在报表服务器级别控制对报表本身的访问。
因此,如果您在报告级别或更高级别直接授予DomainUser1Browser角色,则它们可以访问报告。未设置访问权限,DomainUser2无法运行报告。
既然已经设置了报表权限,那么您需要考虑如何设置数据源。
当凭据存储在数据源中时,您只需要考虑该用户的数据库权限。假设您已经将数据源设置为以DomainReportUser的身份连接到数据库—只有该用户需要访问底层存储过程。DomainUser1不访问数据库,因此不需要在这些对象上设置EXECUTE
;只有DomainReportUser。
当凭证不存储时,数据源数据库访问将由运行报告的用户执行,因此在这种情况下,当DomainUser1运行报告时,它们也将运行底层存储过程,因此需要对象上的EXECUTE
特权。
在这两个数据源场景中,由于报告权限,DomainUser2无法访问报告,因此数据库权限无关紧要。