我正在尝试在多维数据集上实现动态安全性,雇主应该能够看到与他下面所有员工相关的措施。
我这样做是首先使用USERNAME()
获取登录用户的登录凭据,然后获取该用户的后代。
但是,我遇到了问题,因为员工维度中的后代是在empID
属性上定义的,而USERNAME()
则是登录ID属性。
我无法在登录ID属性上使用后代功能。
即
{DESCENDANTS(STRTOMEMBER("[Employee].[Emp ID].&[3]"), , SELF_BEFORE_AFTER)}
有效,但
{DESCENDANTS(STRTOMEMBER("[Employee].[LoginID].&[abc]"), , SELF_BEFORE_AFTER)}
不起作用。
那么,如何根据登录ID获取empID
属性?
有什么想法吗?
答案 0 :(得分:1)
是的,我正在使用角色,我只是尝试在ssms中首先编写一个查询,然后将其置于允许的角色集中。顺便说一句,我设法通过使用名称列来实现我想要的,就像Akshay提到的那样。我将登录ID设置为名称列,而不是使用&运算符使用。我的查询中的运算符。有用。感谢。
答案 1 :(得分:0)
这应该通过动态角色完成,而不是在查询中完成。
使用角色将锁定用户,当查看empID时,他们只会看到映射到其登录名的数字。
这是对此概念的更好解释之一:http://richardlees.blogspot.se/2010/10/ssas-dynamic-security.html?m=1
在多维数据集角色中修复此问题的另一个原因是,如果您只是通过查询执行此操作,则数据不安全。任何人都可以通过excel连接到多维数据集并浏览所有员工数据。
答案 2 :(得分:0)
实现这一目标有多种解决方案。其中一个解决方案是将LoginID
设置为[Employee].[Emp ID]
属性的NameColumn,然后使用以下查询。
SELECT
{} ON 0,
DESCENDANTS(
FILTER
(
[Employee].[Emp ID].MEMBERS,
[Employee].[Emp ID].CURRENTMEMBER.NAME = USERNAME()
)
,
,SELF_BEFORE_AFTER
)
ON 1
FROM [Your Cube Name]