授予在分析服务中对单元格数据的自定义访问权限

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

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

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

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

作为管理员,可以指定角色成员对多维数据集中的单元格具有读取、读取临时权限还是读/写权限。 在单元格上放置权限是允许的最低安全级别,因此在开始在此级别应用权限之前,请务必记住一些事实:

  • 单元级安全性不能扩展已在更高级别受到限制的权限。 例如:如果一个角色拒绝访问维度数据,那么单元格级的安全性无法覆盖被拒绝的权限。 另一个示例:考虑一个在多维数据集上具有 Read 权限的角色,并在单元格上具有 读/写 权限,单元格数据的权限将不是 读/写,而是 Read

  • 自定义权限通常需要在同一角色中的维度成员和单元格之间进行协调。 例如,假设你希望拒绝访问针对不同经销商组合的多项与折扣相关的措施。 假设 经销商 作为维度数据,折扣金额 作为度量值,则需要将度量值(使用本主题中的说明)和维度成员的权限结合到相同角色中。 有关设置维度权限的详细信息 ,请参阅授予对维度数据的自定义访问权限(Analysis Services )。

单元级安全性是通过 MDX 表达式指定的。 因为单元格是一个元组(即一个交叉点,可能涉及多个维度和度量值),所以需要使用 MDX 来标识特定的单元格。

允许访问特定度量值

通过单元格安全性,你可以显式选择可用的指标。 明确确定允许哪些成员后,所有其他度量值都变得不可用。 这可能是通过 MDX 脚本实现的最简单方案,如以下步骤所示。

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

  2. 单元格数据中,检查数据立方体的选择,以确保您选择了正确的数据立方体,然后选择“ 启用读取权限”。

    如果只选中此复选框,但不提供 MDX 表达式,效果与拒绝访问多维数据集中的所有单元格相同。 这是因为每当 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 列显示不可用的单元格

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

可以独立于计算度量值的组成部分来设置对计算度量值的权限。 如果想要协调计算度量值与其依赖度量值之间的权限,请跳到下一部分 Read-Contingent。

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

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

在 Excel 中,使用当前角色连接到数据立方体,并选择所有三个度量,以观察单元格安全性的效果。 请注意,被拒绝的集合中的测量值不可用,但计算出的测量值对用户可见。

具有可用和不可用单元格的Excel表格

设置 Read-Contingent 权限用于计算度量值

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

注释

如果对同一角色中的单元格设置“读取”和“Read-Contingent”权限,会发生什么情况? 该角色将为单元格提供读取权限,但不提供可读取权限。

回忆上一节内容,仅选中启用读取权限复选框而不提供任何 MDX 表达式,将拒绝访问数据集中所有单元格。 这是因为每当 Analysis Services 解析多维数据集单元格的子集时,默认允许集都是空集。

对单元格设置读/写权限

单元格的读/写权限用于启用写回,前提是成员对多维数据集本身具有读/写权限。 在单元格级别授予的权限不能大于在多维数据集级别授予的权限。 有关详细信息,请参阅 “设置分区写回 ”。

另请参阅

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