授予对维度数据的自定义访问权限

Microsoft SQL Server 2005 Analysis Services (SSAS) 数据库角色对多维数据集中的维度拥有读取或读/写权限之后,您便可以对每个维度属性成员定义安全性(也称为维度安全性)。默认情况下,数据库角色可以访问对其拥有读取权限的多维数据集中所有维度属性的所有成员。您可以为角色成员对其拥有特定访问权限 (AllowedSet) 或被明确拒绝访问 (DeniedSet) 的每个维度属性定义特定的属性成员集。还可以为每个属性层次结构定义默认成员,默认情况下,“全部”成员为默认成员。如果您拒绝对某些属性成员的读取权限,您最好将角色成员对其拥有访问权限的成员的聚合(而不是属性层次结构的所有成员的聚合)作为“全部”成员的值。若要指定此行为,应启用 VisualTotals。在启用 VisualTotals 时,聚合将在查询时进行计算,而不是从预先计算好的聚合中检索。

注意注意

维度角色成员拥有的访问权限类型取决于已授予的维度访问权限,可以为读或读/写。

了解 IsAllowed 属性

IsAllowed 属性决定了数据库角色是否可访问特性成员。默认情况下,有权访问维度的数据库角色不能访问特性层次结构。

了解 AllowedSet 属性

AllowedSet 属性使用多维表达式 (MDX) 类型的表达式来确定数据库角色可以访问的特性成员(允许集)。允许集中可以没有特性成员(默认值),也可以包含所有特性成员或部分特性成员。如果允许访问某个特性,但未定义允许集的成员,则授予对所有成员的权限。如果允许访问某个特性,并定义了一个特定的特性成员集,则只能看到允许的特定成员。定义的特定成员集可以限制定义了允许集后添加的特性成员的可见性。

限制某个特性的允许集会影响其他属性的可见性。例如,假设 Customer 特性的允许集只包含某些特性成员,但 City 特性的允许集包含了所有特性成员。在这种情况下,City 属性的可见成员仅限于那些在 Customer 特性的允许集中有客户的城市。如果某个城市在上述允许集中没有客户,则将无法看到该城市的特性成员。换而言之,只有特性成员至少包含一个允许集的成员时,该特性成员才可见。

注意注意

如果定义了一个空属性成员集,则数据库角色看不到任何特性的成员。缺少允许集不会被解释为空集。

了解 DeniedSet 属性

DeniedSet 属性使用 MDX 表达式来确定显式拒绝数据库角色对其访问的特性成员(拒绝集)。拒绝集中可以没有特性成员,也可以包含所有特性成员(默认值)或部分特性成员。默认情况下,不定义拒绝集。

如果拒绝集只包含一组特定的特性成员,则只拒绝数据库角色访问那些特定的成员。定义特定的拒绝集可能会影响在定义拒绝集后添加的特性成员的可访问性。

如果在拒绝集中定义一组特定特性,则此拒绝集对其他属性的可访问性的影响取决于是否启用了 ApplyDenied 属性。例如,假设 State 特性有一个拒绝集,并启用了 ApplyDenied 属性。在这种情况下,数据库角色将不能访问拒绝集中那些状态的任何 Customer 特性。

了解 ApplyDenied 属性

ApplyDenied 属性指示是否使用拒绝集成员来确定特性层次结构对数据库成员的可见性。默认情况下,对于每个特性层次结构,ApplyDenied 属性设置为 True(启用)。

注意注意

允许集与其影响取决于 ApplyDenied 属性的拒绝集不同,在确定特性层次结构的成员对数据库角色的可见性时,始终会应用允许集。

如果启用了 ApplyDenied 属性,并且存在拒绝集,则当特性层次结构包含拒绝集中的任何成员时,数据库角色将不能访问该特性层次结构的任何成员。例如,启用了 ApplyDenied 属性,拒绝集中包含 State 特性中的 State。除了不能访问 State 特性外,数据库角色也将不能访问拒绝集中任何状态的任何 Customers 特性。

如果禁用了 ApplyDenied 属性,但存在拒绝集,那么,即使特性层次结构包含拒绝集中的成员,数据库角色也能访问该特性层次结构的任何成员。例如,禁用了 ApplyDenied 属性,拒绝集由 State 特性中的状态组成。虽然数据库角色将不能访问 State 特性,但仍然可以访问拒绝集中的任何状态的 Customers 特性。

了解 VisualTotals 属性

VisualTotals 属性指示是根据所有单元值还是仅根据数据库角色可见的单元值来计算显示的聚合单元值。

默认情况下,禁用 VisualTotals 属性(设置为 False)。此默认设置可以最大程度地利用性能,因为 Analysis Services 可以快速计算所有单元值的合计值,而不必花时间选择要计算的单元值。

但是,如果用户可以使用聚合集单元值来推导用户的数据库角色无权访问的特性成员的值,则禁用 VisualTotals 属性可能产生安全性问题。例如,Analysis Services 使用三个特性成员的值来计算一个聚合单元值。数据库角色有权限查看这三个特性成员中的两个。如果使用聚合单元值,此数据库角色的成员将能推导第三个特性成员的值。

如果用户能推导用户的数据库角色无权访问的特性成员的值,则安全性最佳做法将指示您启用(设置为 True)该特性的 VisualTotals 属性。如果启用了 VisualTotals 属性,则数据库角色只能查看该角色有权访问的维度成员的聚合合计值。例如,启用 VisualTotals 属性意味着,数据库角色将看到仅包含该角色可见的那些状态(即 State 特性的成员)的聚合合计值。聚合合计值将不包括所有状态的值。

了解 DefaultMember 属性

DefaultMember 属性可以确定查询中未显式包含某个特性时,返回给客户端的数据集。如果未显式包含特性,则 Analysis Services 将使用特性的以下默认成员之一:

  • 如果数据库角色为特性定义了一个默认成员,则 Analysis Services 将使用该默认成员。

  • 如果数据库角色没有为特性定义默认成员,则 Analysis Services 将使用自己为该特性定义的默认成员。除非另行指定,否则特性的默认成员为 All 成员(特性定义为不可聚合时除外)。

例如,数据库角色指定 Male 作为 Gender 特性的默认成员。除非查询在显式包含 Gender 特性的同时又为此特性指定了其他成员,否则 Analysis Services 将返回仅包含男性客户的数据集。有关设置默认成员的详细信息,请参阅定义默认成员

设置对维度中成员的访问权限

在设置对维度中成员的访问权限之前,可能要回顾一下不同的访问权限设置如何影响查询成员时返回的结果集的一些示例。以下主题提供了这些示例设置:

了解了各种访问权限的工作原理后,您便可以授予上述权限了。若要授予对维度中成员的访问权限,用户必须是 Analysis Services 服务器角色的成员,或者是拥有“完全控制”(管理员)权限的 Analysis Services 数据库角色的成员。

使用 Business Intelligence Development Studio 授予对维度中成员的访问权限时,必须使用**“维度数据访问”选项卡的“基本”选项卡上的标准选项,或者使用“高级”**选项卡上的其他自定义选项。

重要说明重要提示

如果 Microsoft Windows 用户或组属于多个数据库角色,则可以累加该用户或组的所有数据库角色的权限(权限联合)。如果一个数据库角色拒绝用户访问某个特性成员,但另一个数据库角色授予该用户访问此特性成员的权限,则该用户将拥有访问该特性成员的权限。

使用“基本”选项卡来授予数据库角色对维度中成员的权限

  1. 在 SQL Server Management Studio 中,连接到 Analysis Services 实例,在对象资源管理器中展开相应数据库的**“角色”**,然后单击某个数据库角色(或创建一个新的数据库角色)。

  2. 单击**“选择页”窗格中的“维度自定义数据访问”,从“维度”列表中选择维度,然后在“高级”选项卡中选择“允许属性”**。

    选择此选项可将 IsAllowed 属性设置为 True。

  3. 在**“属性”**列表中,选择相应的属性,以便指定该数据库角色可以查看该属性的哪些成员。

  4. 若要专门拒绝对某些属性成员的访问,请在**“拒绝的成员集”**框中输入这些属性成员的 MDX 表达式。所有其他属性成员都可查看。

    • 若要专门授予对某些成员的访问权限,请在**“允许的成员集”**框中输入这些属性成员的 MDX 表达式。所有其他属性成员都不可查看。

使用“高级”选项卡来授予数据库角色对维度中成员的权限

  1. 在 SQL Server Management Studio 中,连接到 Analysis Services 实例,在对象资源管理器中展开相应数据库的**“角色”**,然后单击某个数据库角色(或创建一个新的数据库角色)。

  2. 单击**“选择页”窗格中的“维度自定义数据访问”,从“维度”列表中选择维度,然后在“高级”选项卡中选择“允许属性”**。

    选择此选项可将 IsAllowed 属性设置为 True。

  3. 在**“属性”**列表中,选择相应的属性,以便指定该数据库角色可以查看该属性的哪些成员。

  4. 若要专门拒绝对某些属性成员的访问,请在**“拒绝的成员集”**框中输入这些属性成员的 MDX 表达式。所有其他属性成员都可查看。

    若要专门授予对某些成员的访问权限,请在**“允许的成员集”**框中输入这些属性成员的 MDX 表达式。所有其他属性成员都不可查看。