授予对单元数据的自定义访问权限 (Analysis Services)
单元安全性用于允许或拒绝访问多维数据集内的度量值数据。下图显示了当连接用户角色只允许访问某些度量值时,透视表中允许和拒绝的度量值的组合。此示例中,分销商销售额和分销商总产品成本是通过此角色仅可访问的度量值。所有其他度量值均被隐式拒绝(用于获得此结果的步骤如下一节“允许访问特定度量值”所述)。
单元权限适用于单元内的数据,不适用于它的元数据。请注意单元如何在查询结果中仍可见,显示值 #N/A 而非实际单元值。除非客户端应用程序将该值转换,或者通过设置连接字符串中的 Secured Cell Value 属性指定了另一个值,否则在单元中将出现 #N/A 值。
如需完全隐藏单元,你需要限制可见的成员 — 维度、维度属性和维度属性成员。有关详细信息,请参阅授予对维度数据的自定义访问权限 (Analysis Services)。
作为管理员,你可以指定角色成员对多维数据集内的单元是否具有读取、有条件读取或读/写权限。授予单元权限是允许的最低安全级别,因此在开始应用此级别权限之前,请谨记下列事实,这很重要:
单元级安全性不能扩展已限制在更高级别的权限。例如:如果角色拒绝访问维度数据,则单元级安全性不能覆盖拒绝集。另一个示例:如果一个角色对多维数据集有“读取”权限,对单元有“读/写”权限,则单元数据权限不会是“读/写”,而是“读取”。
自定义权限通常需要在相同角色内的维度成员和单元之间进行协调。例如:假如你想拒绝访问分销商不同组合的若干折扣相关度量值。已知分销商为维度数据,折扣额为度量值,你将需要在同一角色内对两个度量值(使用本主题中的说明)的权限,以及对维度成员的权限进行结合。有关设置维度权限的详细信息,请参阅授予对维度数据的自定义访问权限 (Analysis Services)。
单元级安全性通过 MDX 表达式指定。由于一个单元就是一个元组(即潜在多维度和度量值的交集点),很有必要使用 MDX 来确定特定单元。
允许访问特定度量值
你可使用单元安全性来显式选择哪个度量值可用。一旦你明确确定允许哪些成员后,所有其它度量值均不可用。这或许是通过 MDX 脚本实施的最简单的方案,如下列步骤所示。
在 SQL Server Management Studio 中,连接到 Analysis Services 实例,选择数据库,打开“角色”文件夹,然后单击数据库角色(或创建一个新数据库角色)。应已指定成员身份,且该角色已具有对多维数据集的Read访问多维数据集。如需此步骤的帮助,请参阅授予多维数据集或模型权限 (Analysis Services)。
在“单元数据”中,检查多维数据集选择,确保你的选择正确,然后选择“启用读取权限”。
如果你只选择此复选框,且不提供 MDX 表达式,则其作用等同于拒绝访问多维数据集中的所有单元。这是因为 Analysis Services 解析多维数据集单元的子集时,默认允许集是一个空集。
输入如下 MDX 表达式。
(Measures.CurrentMember IS [Measures].[Reseller Sales Amount]) OR (Measures.CurrentMember IS [Measures].[Reseller Total Product Cost])
此表达式显式确定哪个度量值对用户可见。其他度量值对于通过此角色连接的用户将不可用。请注意:CurrentMember (MDX) 设置上下文且后接允许的度量值。该表达式的效果是,如果当前成员包括分销商销售额或分销商总产品成本,则显示值。否则,拒绝访问。此表达式有多个部分,每个部分附在括号中。OR 运算符用于指定多个度量值。
拒绝访问特定度量值
以下 MDX 表达式(也在“创建角色”|“单元数据”|“允许读取多维数据集内容”中指定)具有相反的效果,将导致某些度量值不可访问。此示例中,使用 NOT 和 AND 运算符使折扣金额和折扣率不可访问。所有其他度量值将均对通过此角色连接的用户可见。
(NOT Measures.CurrentMember IS [Measures].[Discount Amount]) AND (NOT Measures.CurrentMember IS [Measures].[Discount Percentage])
Excel 中,单元安全性在下列说明中极其明显:
设置对计算度量值的“读取”权限
可独立于计算度量值组成部分设置对其的权限。如果你想协调计算度量值和其从属度量值之间的权限,可跳至下一节“有条件读取”。
要了解“读取”权限是如何为计算度量值起作用的,请考虑 AdventureWorks 中的分销商毛利润。它源自分销商销售额和分销商总产品成本度量值。只要角色拥有对分销商毛利润单元的“读取”权限,此度量值就可见,即使已明确拒绝对其他度量值的权限。作为演示,请将以下 MDX 表达式复制到“创建角色”|“单元数据”|“允许读取多维数据集内容”中。
(NOT Measures.CurrentMember IS [Measures].[Reseller Sales Amount])
AND (NOT Measures.CurrentMember IS [Measures].[Reseller Total Product Cost])
Excel 中,使用当前角色连接到多维数据集,并选择所有三个度量值以查看单元安全性的作用。请注意,拒绝集中的度量值不可用,但计算度量值对用户可见。
设置对计算度量值的“有条件读取”权限
单元安全性为设置对参与计算的相关单元的权限提供一个替代:有条件读取。请再次思考分销商毛利润实例。输入前一节提供的同一 MDX 表达式时,此次将其置于“创建角色”|“单元数据”对话框(在“允许根据单元安全性读取单元内容”下方的文本区域内),在 Excel 中查看时,其结果显而易见。由于分销商毛利润取决于分销商销售额和分销商总产品成本,因此由于无法访问毛利润组成部分,现也无法访问毛利润。
注意 |
---|
如果你对相同角色内的单元设置“读取”和“有条件读取”权限,会出现什么情况?角色会拥有对单元的“读取”权限,而非“有条件读取”权限。 |
撤消之前章节的仅选择“启用有条件读取权限”复选框,不提供任何 MDX 表达式,将拒绝访问多维数据集中的所有单元。这是因为 Analysis Services 解析多维数据集单元的子集时,默认允许集是一个空集。
设置对单元的“读/写”权限
假定成员拥有对多维数据集本身的“读/写”权限,则对单元的“读/写”权限用于启用写回。授予的单元级权限不能大于授予的多维数据集级权限。有关详细信息,请参阅设置分区写回。
请参阅
任务
授予对维度数据的自定义访问权限 (Analysis Services)
参考
“MDX 生成器”对话框(Analysis Services - 多维数据)