授予单元数据的自定义访问权限 (Analysis Services)

适用于: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

单元安全性用于允许或拒绝对多维数据集中度量值数据的访问。 下图显示了作为其角色仅允许访问特定度量值的用户进行连接时,数据透视表中允许和拒绝的度量值的组合。 此示例中, 分销商销售额分销商总产品成本 是通过此角色仅可访问的度量值。 所有其他度量值均被隐式拒绝(以下的下一节“允许访问特定度量值”中提供了用于获得此结果的步骤。)

显示允许和拒绝单元格的数据

单元权限适用于单元内的数据,而不适用于其元数据。 请注意单元如何在查询结果中仍然可见,其值显示为 #N/A ,而非实际单元值。 除非客户端应用程序将该值转换,或者通过设置连接字符串中的 Secured Cell Value 属性指定了另一个值,否则在单元中将出现 #N/A 值。

若要完全隐藏单元格,必须限制可查看的成员维度、维度属性和维度属性成员。 有关详细信息,请参阅 授予对维度数据的自定义访问权限 (Analysis Services)

作为管理员,你可以指定角色成员是否具有对多维数据集内单元的读取、有条件读取或读/写权限。 授予对单元的权限是允许的最低级别的安全性,因此在开始应用此级别的权限之前,请谨记以下几点:

  • 单元级安全性无法扩展已限制在较高级别的权限。 示例:如果一个角色拒绝访问维度数据,则单元级安全性无法重写拒绝集。 另一示例:假如一个角色拥有对多维数据集的“读取”权限和对单元的“读/写”权限,那么单元数据权限将不会是“读/写”,而是“读取”

  • 通常需要在同一角色的维度成员和单元之间协调自定义权限。 例如,假如想拒绝访问不同分销商组合的多个与折扣相关的度量值。 已知 分销商 为维度数据, 折扣额 为度量值,你将需要在同一角色内对两个度量值(使用本主题中的说明)的权限,以及对维度成员的权限进行结合。 有关设置维度权限的详细信息 ,请参阅授予对维度数据的自定义访问权限 (Analysis Services)

单元级安全性通过 MDX 表达式指定。 由于一个单元就是一个元组(即跨潜在的多个维度和度量值的交点),因此有必要使用 MDX 来标识特定单元。

允许对特定度量值的访问

你可以使用单元安全性显式地选择哪些度量值可访问。 一旦专门标识了允许访问哪些成员,则所有其他度量值均变为不可访问。 这可能是通过 MDX 脚本实施的最简单的方案,如以下步骤所示。

  1. 在“SQL Server Management Studio连接到SQL Server Analysis Services实例”中,选择一个数据库,打开“角色”文件夹,然后单击数据库角色 (或) 创建新的数据库角色。 应该已指定成员身份,且该角色应具有对多维数据集的 Read 权限。 如果需要此步骤 的帮助,请参阅 (Analysis Services) 授予多维数据集或模型权限

  2. 在“单元数据” 中,检查多维数据集选择,确保选择正确,然后选择“启用读取权限”

    如果只选择了该复选框,而不提供一个 MDX 表达式,则其效果就与拒绝访问多维数据集中的所有单元一样。 这是因为,每当SQL Server Analysis Services解析多维数据集单元格的子集时,默认允许集都是空集。

  3. 输入以下 MDX 表达式。

    (Measures.CurrentMember IS [Measures].[Reseller Sales Amount]) OR (Measures.CurrentMember IS [Measures].[Reseller Total Product Cost])  
    

    此表达式显式地标识了哪些度量值对用户可见。 通过此角色连接的用户将无法访问其他度量值。 请注意, CurrentMember (MDX) 设置上下文,后跟允许的度量值。 该表达式的效果是,如果当前成员包括 分销商销售额分销商总产品成本,则显示值。 否则,拒绝访问。 该表达式含有多个部分,每个部分由圆括号括起来。 OR 运算符用于指定多个度量值。

拒绝对特定度量值的访问

以下 MDX 表达式(也在 创建角色 | 单元格数据 | 允许读取多维数据集内容中指定)具有相反的效果,导致某些度量值不可用。 此示例中,使用 NOTAND 运算符使 折扣金额折扣率 不可访问。 所有其他度量值将对通过此角色连接的用户可见。

(NOT Measures.CurrentMember IS [Measures].[Discount Amount]) AND (NOT Measures.CurrentMember IS [Measures].[Discount Percentage])  

在下图的 Excel 中,单元安全性显而易见:

显示单元格为不可用的 Excel 列

设置对计算度量值的“读取”权限

对计算度量值的权限可独立于其组成部分进行设置。 如果想协调计算度量值和其依赖度量值之间的权限,请跳转到下一节“有条件读取”。

要了解读取权限是如何对一个计算度量值产生作用的,请考虑 AdventureWorks 中的 分销商毛利润 。 它派生于 分销商销售额分销商总产品成本 度量值。 只要一个角色具有对 分销商毛利润 单元的“读取”权限,此度量值就可查看,即使对其他度量值的权限被明确拒绝。 作为演示,将以下 MDX 表达式复制到 创建角色 | 单元格数据 | 允许读取多维数据集内容

(NOT Measures.CurrentMember IS [Measures].[Reseller Sales Amount])  
AND (NOT Measures.CurrentMember IS [Measures].[Reseller Total Product Cost])  

在 Excel 中,使用当前角色连接到多维数据集,并选择全部三个度量值以查看单元安全性的影响。 请注意,拒绝集中的度量值是无法访问的,但计算度量值对用户可见。

包含可用和不可用单元格的 Excel

设置对计算度量值的“有条件读取”权限

单元安全性为设置对参与计算的相关单元的权限提供了一个替代,即“有条件读取”。 再次考虑 分销商毛利润 示例。 如果输入上一部分中提供的相同 MDX 表达式,此时会放置在“ 创建角色 | 单元格数据 ”对话框的第二个文本区域, (位于“ 允许根据单元格安全性) 读取单元格内容 ”下方的文本区域中,结果在 Excel 中查看时会很明显。 由于 分销商毛利润分销商销售额分销商总产品成本而定,现无法访问毛利润,因为无法访问其组成部分。

注意

在同一角色内同时设置对一个单元的“读取”和“有条件读取”权限将会发生什么? 此角色将提供对单元的“读取”权限,而非“有条件读取”权限。

回顾之前章节的内容可知只要选择“启用有条件读取权限”复选框,无需提供任何 MDX 表达式,即可拒绝对多维数据集内所有单元的访问。 这是因为,每当SQL Server Analysis Services解析多维数据集单元格的子集时,默认允许集都是空集。

设置对单元的“读/写”权限

对单元的“读/写”权限用于启用回写(假设成员具有对多维数据集本身的“读/写”权限)。 授予的单元级权限不能大于授予的多维数据集级权限。 有关详细信息,请参阅 Set Partition Writeback

另请参阅

MDX 生成器(Analysis Services -多维数据)
基本 MDX 脚本 (MDX)
授予处理权限 (Analysis Services)
授予维度的权限 (Analysis Services)
授予对维度数据的自定义访问权限 (Analysis Services)
授予多维数据集或模型权限 (Analysis Services)