Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 聚合-基于父子层次结构的SSAS动态安全性_Security_Ssas_Parent Child_Mdx_Olap - Fatal编程技术网

Security 聚合-基于父子层次结构的SSAS动态安全性

Security 聚合-基于父子层次结构的SSAS动态安全性,security,ssas,parent-child,mdx,olap,Security,Ssas,Parent Child,Mdx,Olap,我想建立以下SSAS安全局势: 我创建了相应的角色来过滤数据,user1只能看到伦敦100,从这里也可以看到英国100的聚合。 我还有一个无事实维度,它将DimUsers和DimBranch关联成多对多关系 请求是user1只能看到伦敦100(就像以前一样),而不是UK-100,他需要看到全英国(150)。可以在SSAS中实现吗?在设置维度安全性时,您是否签出了“启用可视总计”选项 听起来好像你已经启用了这个选项,这使得英国的总数达到100。默认情况下,它将被禁用,这将给出所需的结果Lond

我想建立以下SSAS安全局势:

我创建了相应的角色来过滤数据,
user1
只能看到伦敦100,从这里也可以看到英国100的聚合。 我还有一个无事实维度,它将DimUsers和DimBranch关联成多对多关系

请求是user1只能看到伦敦100(就像以前一样),而不是UK-100,他需要看到全英国(150)。可以在SSAS中实现吗?

在设置维度安全性时,您是否签出了“启用可视总计”选项


听起来好像你已经启用了这个选项,这使得英国的总数达到100。默认情况下,它将被禁用,这将给出所需的结果London=100,UK=150。

对,很抱歉没有注意到您的分支维度是父-子维度,即使这在问题标题中

我已经设置了一个测试多维数据集来镜像您的设置(据我所知)。我忽略了设置自定义MDX角色安全性时出现的愚蠢错误“找不到维度用户”;忽略一个事实,即在SSDT(又名VisualStudio)多维数据集浏览器中,这种自定义安全性不起作用。让我们把这归结为SSDT UI是一个POS,因为在SSMS MDX查询中,我得到了我期望的结果

这是我的表:

BranchID    ParentID    BranchName
1           NULL        Scotland
2           NULL        England
3           1           Glasgow
4           1           Edinburgh
5           2           Bristol
6           2           London
分支维度上有两个层次结构:一个称为BranchID(仅在属性BranchID上),另一个称为ParentChild,这是使用ParentID的父子层次结构

我通过在“允许的成员集”框中使用以下表达式来限制“受限”用户对Branch.ParentChild层次结构的访问:

NONEMPTY(Branches.[ParentChild].members,  
(Measures.UserBranchAccess,StrToMember("[Users].[" + UserName + "]")))
因此,现在我通过填充一个我称为UserBranchAccess的表,将对所有分支的访问权授予“受限访问”用户。(我称之为UserBranchAccess的结果计数度量)。然后通过删除相应的行来删除对Bristol的访问

在SSMS中运行此查询,并将EffectiveUserName设置为“受限用户”,我得到的结果正是您想要的结果:

SELECT
NONEMPTY(Branches.[ParentChild].members,   
(Measures.UserBranchAccess,StrToMember("[Users].[" + UserName + "]"))) 
ON 0
FROM [Test Dimensions]
结果:

All England London  Scotland    Edinburgh   Glasgow
700 550     50      150         50          100
(此处显示了我的默认度量值Branch Total——请注意,布里斯托尔的500未显示,但包含在英格兰总计中)

然后,我尝试取消“受限”用户访问布里斯托尔和英格兰的权限。我得到了完全相同的结果

让我们看看“安全性”度量UserBranchAccess发生了什么变化:

SELECT
Branches.[ParentChild].members ON 0
FROM [Test Dimensions]
WHERE
(UserBranchAccess,Users.[User ID].[RestrictedUser])
结果:

All England Bristol London  
4   1       (null)  1
(为清晰起见,未显示)

英格兰是被允许的,因为至少有一个孩子是被允许的

为了确保没有遗漏任何处理,我在分支维度的(非父子)层次结构上执行了相同的查询:

SELECT Branches.[BranchID].Members ON 0
FROM [Test Dimensions]
WHERE
(UserBranchAccess,Users.[User ID].[EMEA\martinhe])
结果与预期的一样:England在普通BranchID层次结构中不被明确允许,但在父子层次结构中被允许(参见前面的结果):

All Bristol England London
4   (null)  (null)  1
(同样,为清晰起见,未显示苏格兰)

所以底线是,我无法重现你所面临的问题,即(使用我的数据)伦敦将显示50,英格兰也将仅显示50


但也许您可以确定您的设置与我的不同之处?

我使用以下MDX脚本
非空([Dim Branch hierarchys].[Branch Hierarchy].[Branch Hierarchy].[franch Hierarchy].[Measures].[grated],strotmember([Dim Users].[Account Name].&[“+UserName()+”))限制多维数据集中的层次结构维度数据
所有属性的“启用可视化总计”都已禁用我刚刚意识到您的分支维度是父子维度,我认为这会有所不同。我试图复制您的多维数据集结构,但当我试图用MDX脚本保护维度数据时,我遇到了这个令人讨厌的错误。(尽管我使用的是SSAS 2014)。找不到有效的解决方案。。。