授予对单元数据的自定义权限

授予 Microsoft SQL Server 2005 Analysis Services (SSAS) 中某个数据库角色对多维数据集的读取或读/写权限之后,角色成员即有权查看所有单元数据。若要限制对特定单元的访问,必须专门限制单元访问权限。若要限制对特定维度成员的访问,请参阅授予对单元数据的自定义权限

若要授予数据库角色访问特定单元的权限,可以利用多维表达式 (MDX) 来定义各种拥有读取、有条件读取或读/写权限的单元。有关详细信息,请参阅使用 MDX 表达式设置单元数据权限

设置权限指南

不管数据库角色是否拥有读取、有条件读取或读/写单元数据的权限,都会有一些指南和背景信息使得处理这些权限更为轻松。

  • 授予派生单元权限时须谨慎
    派生单元从其他单元获得数据。如果数据库角色拥有访问派生单元的权限,但是没有访问派生单元从中获得其值的单元的权限,该数据库角色的成员就有可能推断出他或她没有访问权限的单元的值。例如,数据库角色拥有访问销售利润度量值单元的权限(即,这些度量值对于该数据库角色是可见的),但是该角色没有访问成本度量值单元的权限。该数据库角色的成员可以通过从销售度量值中减去利润度量值来确定成本的度量值。

  • 单元数据的权限不能高于多维数据集的权限
    授予特定单元的权限不能超过授予数据库角色访问整个多维数据集的权限。例如,某个数据库角色拥有读/写某个单元的权限,但是同一数据库角色只有读取多维数据集的权限。单元数据的权限不是读/写,只有读权限。

  • 获得对数据单元的权限并不意味着获得对维度数据的权限
    虽然数据库角色可能拥有对单元数据的权限,但该角色没有对维度数据的权限,除非已分别授予了该角色读取或读/写维度数据的权限。数据库角色获得对多维数据集数据的权限之后,可能会限制该角色对其有权访问的维度属性的权限,但不会使该角色本来就无权访问的维度属性变得可以访问。

  • 拒绝用户访问单元数据并不会对用户隐藏该单元
    单元数据的访问权限无法控制数据库角色是否能查看某个单元,但能够控制该角色是否能够查看该单元的内容。如果某个数据库角色无权访问单元数据,该单元在查询结果中仍是可见的。但是,该单元包含的是 #N/A 值而不是实际的单元值。除非客户端应用程序将该值转换,或者通过设置连接字符串中的 Secured Cell Value 属性指定了另一个值,否则在单元中将出现 #N/A 值。

    如果在结果中不希望出现该单元,则必须对那些可查看的成员(维度、维度属性和维度属性成员)进行限制。有关详细信息,请参阅授予维度访问权限授予对维度数据的自定义访问权限

设置对单元数据的读取权限

数据库角色的成员可以查看那些该数据库角色有读取权限的单元。即使这些单元派生于数据库角色没有访问权限的单元,这些单元也可以查看。

例如,假设名为利润的计算度量值派生于销售额成本度量值。如果数据库角色拥有读取利润单元的权限,那么该度量值可以查看,即使该数据库角色没有访问销售额成本度量值单元的权限。

注意注意

如果授予数据库角色对多维数据集单元子集的读取权限,但是该角色没有一个 MDX 表达式来指定授予对哪些单元的读取权限,那么该数据库角色对多维数据集中的任何单元都没有读取权限。这是因为当 Analysis Services 解析多维数据集单元子集时,允许的默认集为空集。

若要向维度中的成员授予访问权限,则用户必须是 Analysis Services 服务器角色成员,或者是拥有完全控制(管理员)权限的 Analysis Services 数据库角色成员。

授予数据库角色对单元数据的读取权限

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

  2. 单击**“选择页”窗格中的“多维数据集单元数据”,选择“多维数据集”列表中的多维数据集,然后选中“启用读取权限”**复选框。

    如果没有在**“允许读取多维数据集内容”**框中输入成员,那么所有的多维数据集单元都可查看。

  3. 若要只授予某些特定成员的访问权,在**“允许读取多维数据集内容”**框中输入多维数据集单元的 MDX 表达式。其他的多维数据集单元将不能查看。

    若要帮助生成 MDX 表达式,请单击**“编辑 MDX”**旁边的浏览按钮,再通过所显示的 MDX 生成器窗口生成 MDX 表达式。

    有关用于设置单元数据权限的 MDX 表达式的示例,请参阅使用 MDX 表达式设置单元数据权限

设置对单元数据的有条件读取权限

只有在符合下列其中一个条件时,才可以查看数据库角色拥有有条件读取权限的单元:

  • 拥有有条件读取权限的单元不是派生于其他单元。

  • 拥有有条件读取权限的单元派生于其他单元,但是数据库角色拥有读取派生单元的所有单元的权限。

例如,数据库角色拥有有条件读取利润单元的权限。利润单元派生于销售额成本度量值。在此情况下,只有数据库角色同时拥有读取销售额成本度量值的权限时利润单元才可以查看。如果数据库角色拥有有条件读取成本单元的权限,而成本度量值派生于其他单元,那么只有在该数据库角色拥有读取派生成本度量值的单元的权限时利润单元才可以查看。因此,对于有条件读取权限,单元派生自其他单元,而后者又派生自其他单元,如此循环往复,这样就产生了一条条件链。

注意注意

如果数据库角色拥有读取和有条件读取单元的权限,那么该角色就拥有读取该单元的权限。

注意注意

如果授予数据库角色对多维数据集单元子集的有条件读取权限,但是该角色没有一个 MDX 表达式来指定授予对哪些单元的有条件读取权限,那么该数据库角色对多维数据集中的任何单元都没有有条件读取权限。这是因为当 Analysis Services 解析多维数据集单元子集时,允许的默认集为空集。

若要向维度中的成员授予访问权限,则用户必须是 Analysis Services 服务器角色成员,或者是拥有完全控制(管理员)权限的 Analysis Services 数据库角色成员。

授予数据库角色有条件读取单元数据的权限

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

  2. 单击**“选择页”窗格中的“多维数据集单元数据”,选择“多维数据集”列表中的多维数据集,然后选中“启用有条件读取权限”**复选框。

  3. 在**“允许根据单元安全性有条件读取单元内容”**框中,输入一个 MDX 表达式,以确定数据库角色拥有有条件读取权限的单元。

    若要帮助生成 MDX 表达式,请单击**“编辑 MDX”**旁边的浏览按钮,再通过所显示的 MDX 生成器窗口生成 MDX 表达式。

    有关用于设置单元数据权限的 MDX 表达式的示例,请参阅使用 MDX 表达式设置单元数据权限

设置对单元数据的读/写权限

假定数据库角色成员拥有读/写多维数据集本身的权限,那么对于这些成员,数据库角色拥有读/写权限的单元可以查看并且可以更新。授予的单元级权限不能大于授予的多维数据集级权限。

注意注意

如果授予数据库角色对多维数据集单元子集的读/写权限,但是该角色没有一个 MDX 表达式来指定授予对哪些单元的读/写权限,那么该数据库角色对多维数据集中的任何单元都没有读/写权限。这是因为当 Analysis Services 解析多维数据集单元子集时,允许的默认集为空集。

若要授予或拒绝对特定单元的访问权限,用户必须是 Analysis Services 服务器角色成员,或者是拥有完全控制(管理员)权限的 Analysis Services 数据库角色成员。

授予数据库角色对单元数据的读/写权限

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

  2. 单击**“选择页”窗格中的“多维数据集单元数据”,选择“多维数据集”列表中的多维数据集,然后选中“启用读/写权限”**复选框。

  3. 在**“允许读写多维数据集内容”**框中,输入一个 MDX 表达式,可以确定数据库角色拥有读/写权限的单元。

    若要帮助生成 MDX 表达式,请单击**“编辑 MDX”**旁边的浏览按钮,再通过所显示的 MDX 生成器窗口生成 MDX 表达式。

    有关用来设置单元数据权限的 MDX 表达式示例,请参阅使用 MDX 表达式设置单元数据权限