启用对多维数据集的读取访问权限后,可以设置显式允许或拒绝访问维度成员的其他权限(包括包含多维数据集中使用的所有度量值的度量值)。 例如,给定多个类别的经销商,你可能想要设置权限以排除特定业务类型的数据。 下图展示了在“经销商”维度中拒绝访问仓储业务类型的前后效果。
默认情况下,如果可以从 Analysis Services 多维数据集读取数据,则会自动对该多维数据集关联的所有度量值和维度成员拥有读取权限。 尽管此行为可能足以满足许多场景要求,但有时安全需要采用更加细分的授权策略,以便在同一维度上为不同用户提供不同级别的访问权限。
可以通过选择要允许(AllowedSet)或拒绝(DeniedSet)访问的成员来限制访问。 为此,可以选择或取消选择维度成员以包含或排除在角色中。
基本维度安全性是最容易的;只需选择要在角色中包含或排除的维度属性和属性层次结构。 高级安全性更为复杂,需要 MDX 脚本编写方面的专业知识。 下面介绍了这两种方法。
先决条件
并非所有度量值或维度成员都可以在自定义访问方案中使用。 如果角色限制对默认度量值或成员的访问,或者限制对度量值表达式中度量值的访问权限,则连接将失败。
检查维度安全性的障碍:默认度量值、默认成员以及度量值表达式中使用的度量值
在 SQL Server Management Studio 中,右键单击多维数据集并选择“ 脚本多维数据集”作为 | ALTER To | New Query Editor Window。
搜索
DefaultMeasure。 应为多维数据集找到一个,每个透视应找到一个。 定义维度安全性时,请避免限制对默认度量值的访问。接下来,搜索
MeasureExpression。 度量公式是一种基于计算的度量,其中其计算通常包括其他度量值。 验证是否未在表达式中使用要限制的度量值。 或者,继续限制访问,只需确保在整个多维数据集中排除对该度量值的所有引用。最后,搜索
DefaultMember。 记录任何作为属性默认成员的属性。 在设置维度安全性时,避免对这些属性施加限制。
基本维度安全性
在 SQL Server Management Studio 中,连接到 Analysis Services 实例,在对象资源管理器中展开相应数据库 的角色 ,然后单击数据库角色(或创建新的数据库角色)。
该角色应已具有对多维数据集的读取访问权限。 如需此步骤的帮助,请参阅 “授予多维数据集或模型权限”(Analysis Services)。
在 “维度数据 | 基本”上,选择要为其设置权限的维度。
选择属性层次结构。 并非所有属性都可用。 只有具有 AttributeHierarchyEnabled 的属性才会显示在 “属性层次结构 ”列表中。
选择要允许或拒绝访问的成员。 允许通过 “选择所有成员 ”选项进行访问是默认设置。 建议您保留此默认设置,然后通过此角色在成员身份窗格中清除不应对 Windows 用户和组帐户可见的各个成员。 优点是,将来在处理操作中添加的新成员会自动对通过此角色连接的人开放。
或者,可以 取消选择所有成员 以撤消整体访问权限,然后选择允许的成员。 在未来的处理操作中,只有在手动编辑维度数据安全性以允许访问它们之后,新成员才可见。
(可选)单击“ 高级 ”以启用
Visual Totals此属性层次结构。 此选项根据通过角色可用的成员重新计算聚合。注释
在应用裁剪维度成员的权限时,聚合总计不会自动重新计算。 假设属性层级的
All成员在应用权限之前返回计数值为 200。 应用拒绝访问某些成员的权限后,All仍返回 200,即使对用户可见的成员值要少得多。 为了避免对多维数据集使用者产生混淆,您可以配置All成员仅聚合到其角色成员所属的成员,而不是属性层次结构中所有成员的聚合。 若要调用此行为,可以在配置维度安全性时在“高级”选项卡上启用Visual Totals。 启用后,聚合在查询时计算,而不是从预先计算的聚合中检索。 这可以显著影响查询性能,因此仅在必要的情况下使用它。
隐藏措施
在授予对单元格数据的自定义访问权限(Analysis Services)中,解释了要完全隐藏度量的所有可视化方面,而不仅仅是其单元格数据,需要获得对维度成员的权限。 本部分介绍如何拒绝访问度量值的对象元数据。
在 “维度数据 | 基本”上,向下滚动维度列表,直到到达多维数据集维度,然后选择“ 度量值维度”。
从度量值列表中,清除不应显示通过此角色连接的用户的度量值的复选框。
注释
检查先决条件,了解如何识别可能破坏角色安全性的措施。
高级维度安全性
如果你有 MDX 专业知识,另一种方法是编写 MDX 表达式,这些表达式设置允许或拒绝访问成员的条件。 单击“ 创建角色 | 维度数据 | 高级 ”以提供脚本。
您可以使用 MDX Builder 来编写 MDX 语句。 有关详细信息 ,请参阅 MDX 生成器(Analysis Services - 多维数据 )。 “ 高级 ”选项卡具有以下选项:
属性
选择要为其管理成员安全性的属性。
允许的成员集
AllowedSet 可以解析为无成员(默认值)、所有成员或某些成员。 如果允许访问某个属性,但未定义允许集的任何成员,则会授予对所有成员的访问权限。 如果允许访问某个属性并定义一组特定的属性成员,则只有显式允许的成员可见。
当属性参与多级层次结构时,创建 AllowedSet 将产生连锁反应。 例如,假设某个角色允许访问华盛顿州(假设该角色正在向公司华盛顿州销售部门授予权限的情况)。 对于通过这个角色连接的人,包含祖先(美国)或后代(西雅图和雷德蒙德)的查询将只会看到包含华盛顿州在内的关系链中的成员。 由于未显式允许其他状态,因此效果将与拒绝的效果相同。
注释
如果定义属性成员的空集 ({}),则该属性的成员对数据库角色不可见。 缺少允许集不会解释为空集。
拒绝的成员集
DeniedSet 属性可以解析为无成员、所有成员(默认值)或某些属性成员。 当被拒绝集仅包含一组特定的属性成员时,如果属性位于多级层次结构中,数据库角色将仅拒绝对这些特定成员的访问,以及子代。 请考虑华盛顿州销售部门示例。 如果华盛顿被置于 DeniedSet 中,通过此角色连接的人将会看到除华盛顿及其从属属性以外的所有其他州。
回忆一下上一节的内容,拒绝集是一个固定的集合。 如果处理随后会引入还应被拒绝访问的新成员,则需要编辑此角色以将这些成员添加到列表中。
默认成员
DefaultMember 属性用于确定在查询中未显式包含某个属性时返回给客户端的数据集内容。 如果未显式包含该属性,Analysis Services 将为该属性使用以下默认成员之一:
如果数据库角色为属性定义默认成员,Analysis Services 将使用此默认成员。
如果数据库角色未为属性定义默认成员,Analysis Services 将使用为属性本身定义的默认成员。 除非另有指定,否则属性的默认成员是
All成员(除非该属性定义为不可聚合)。
例如,假设数据库角色指定 Male 为属性的默认成员 Gender 。 除非查询同时显式包含 Gender 该属性并指定此属性的其他成员,否则 Analysis Services 将返回仅包含男性客户的数据集。 有关设置默认成员的详细信息,请参阅 “定义默认成员”。
启用可视化总计
VisualTotals 属性指示是根据所有单元格值计算显示的聚合单元格值,还是仅根据数据库角色可见的单元格值计算。
默认情况下,VisualTotals 属性处于禁用状态(设置为 False)。 此默认设置可最大化性能,因为 Analysis Services 可以快速计算所有单元格值的总数,而无需花时间选择要计算的单元格值。
但是,如果用户可以使用聚合单元格值来推断用户数据库角色无权访问的属性成员的值,则禁用 VisualTotals 属性可能会创建安全问题。 例如,Analysis Services 使用三个属性成员的值来计算聚合的单元格值。 数据库角色有权查看这三个属性成员中的两个。 使用聚合单元格值,此数据库角色的成员将能够推断第三个属性成员的值。
将 VisualTotals 属性设置为 True 可以消除此风险。 启用 VisualTotals 属性时,数据库角色只能查看角色有权访问的维度成员的聚合总计。
检查
单击此项可测试此页上定义的 MDX 语法。
另请参阅
授予多维数据集或模型权限(Analysis Services)
授予对单元格数据的自定义访问权限(Analysis Services)
授予对数据挖掘结构和模型的权限(Analysis Services)
授予对数据源对象的权限(Analysis Services)