在SSRS中,我遇到了一些行级安全性的挑战,这涉及运行一些SQL逻辑来根据简单的安全模型过滤返回的结果集。
我的问题是,如何可选地将两者都包括在内,从而使财务用户看到所有的东西,而其他人只看到自己的部门?
这听起来很简单,但我正在努力想出最好的方法&最简单的方法,我的搜索结果已经变得毫无意义,因为很难知道问谷歌的正确问题,等等。
解决方案既可以在数据查询中完成,也可以在SSRS本身中完成,但是我不能回去修改数据库--我必须使用我所拥有的。
数据结构概述.
USER表有user_id和department,DEPT表有department和business area。
金融是一个包含多个部门的业务领域。
任何拥有部门的用户都必须能够看到所有部门和业务领域。
我希望这件事足够彻底,有人能给我一个正确的方向。它可能正盯着我的脸,但我有很大的时间压力,所以不可能永远花在它上。谢谢!
发布于 2015-03-22 13:23:45
select distinct table.col1, table,col2
from table
join user
on ( user.ID = 'userone' and department.area = 'finance' )
or ( user.ID = 'userone' and department.dept = user.dept' )发布于 2015-03-23 20:22:27
最简单的方法是拥有一个UserDepartment表,并在添加财务用户时简单地添加所有部门。并设置它,以便部门表有一个触发器来向所有财务用户添加任何新部门。
这使得查询变得很简单,它为您提供了添加其他用户的灵活性,如果您以后需要的话,其他用户可以看到的比他们的部门更多。它还避免了具有OR条件复杂逻辑的各种性能较差的查询。
发布于 2015-03-26 15:14:06
在SSRS中有非常简单的处理方法。
在报告中包含两个数据集。一个没有过滤器。还有一个有限制的,在
username = @CurrentUserName您可以使用SELECT SUSER_NAME()获取当前用户的用户名。将其存储在参数@CurrentUserName中。
将两个表放在相同的位置,从上面的两个数据集中获取资源。
对于下一部分,您需要了解SSRS中的“隐藏”属性。查找当前用户名。如果它属于“Finance”,则不受任何限制地显示该表,并隐藏另一个表。如果没有,请隐藏第一个表并显示第二个(筛选)表。
https://stackoverflow.com/questions/29192507
复制相似问题