导读:本文主要介绍Analysis Service的安全问题,特别是账号的权限分配,包括:
■1、创建一个本地测试账号和基本数据库角色
■2、限制标准属性层次结构(Attribute-Hierarchy Restrictions)
■3、限制父子层次结构(Restricting Parent-Child Hierarchies)
■4、实施Cell级别的限制(Implementing Cell-Level Restrictions)
本文所用数据库和所有源码,请到微软官网下载
1、创建一个本地测试账号和基本数据库角色
创建本地账号的步骤如下:
假定账号为MdxUser,属于用户组MdxUserGroup。


创建数据库的角色如下:Role



下来检验我们上面的设置是否生效。我们使用UserName函数(http://msdn.microsoft.com/zh-cn/library/ms146016.aspx)
在cmd中输入:
Set ComputerName
rem ‘获取机器名为AP4
RunAs /user:computername\MdxUser "ssms"
此时提示输入mdxuser账号的密码:
输入成功后,即可以MdxUser登录Analysis Service


例11-1
WITH
MEMBER [Measures].[Current User] AS
UserName()
SELECT
{[Measures].[Current User]} ON COLUMNS
FROM [Step-by-Step]
;

修正以仅返回当前登录的用户名
例11-2
WITH
MEMBER [Measures].[Current User] AS
VBAMDX!Right(
UserName(),
VBAMDX!Len(UserName()) -
VBAMDX!Instr(UserName(),"\")
)
SELECT
{[Measures].[Current User]} ON COLUMNS
FROM [Step-by-Step]
;

顺便我们介绍一个技巧,我们在查询时不知道列或者仅想作测试时,可以用empty Sets来代替,其作用类似于SQL查询中的“*”。
例11-3
SELECT
{} ON COLUMNS,
{[Product].[Product].[Product].Members} ON ROWS
FROM [Step-by-Step]

2、限制标准属性层次结构(Attribute-Hierarchy Restrictions)
第一步设计允许集,在此之前我们先看一个基本示例:
例11-4
SELECT
{} ON COLUMNS,
{[User].[User].[User].Members} ON ROWS
FROM [Step-by-Step]
;

如果不希望MdxOtherUser出现在这个查询结果中,那么如下:
例11-5
SELECT
{} ON COLUMNS,
StrToSet(
"{([User].[User].[User].[" +
VBAMDX!Right(
UserName(),
VBAMDX!Len(UserName()) -
VBAMDX!Instr(UserName(),"\")
) + "])}"
) ON ROWS
FROM [Step-by-Step]
;

注意上例中使用了StrToSet(http://msdn.microsoft.com/zh-cn/library/ms144782.aspx),类似的还有
StrToValue(http://msdn.microsoft.com/zh-cn/library/ms144951.aspx)
StrtoTuples(http://msdn.microsoft.com/zh-cn/library/ms146079.aspx)
在例11-3中执行结果切换到Message视图产,可以看到有397个成员。

我们作个限制:
例11-6
SELECT
{} ON COLUMNS,
Exists(
{[Product].[Product].[Product].Members},
{[User].[User].[User].[MdxUser]},
'User Product Relationship'
) ON ROWS
FROM [Step-by-Step]
;

第二步实施允许集:



设置完成,我们第三步检验设置效果:

有人会注意到这个结果109与刚才的108不一致,其实,限制集并不关心是否与MdxUser有关联,所以是109。
此时,再重新执行例11-4,结果只有MdxUser一项。
3、限制父子层次结构(Restricting Parent-Child Hierarchies)
在一个维度中,如果引用自身,比如最典型的父子层次关系是员工和账户。一个员工出于业务需要可能有多个账户。第一步设计允许集
我们看一个查询实例:
例11-7
SELECT
{} ON COLUMNS,
{[Employee].[Employees].Members} ON ROWS
FROM [Step-by-Step]
;

例11-8
WITH
MEMBER [Measures].[User] AS
[Employee].[Employees].CurrentMember.Properties("User")
SELECT
{([Measures].[User])} ON COLUMNS,
{[Employee].[Employees].Members} ON ROWS
FROM [Step-by-Step]
;
注意到Stephen Y.Jiang对应的windows用户为MdxUser

我们修改查询如下:
例11-9
WITH
MEMBER [Measures].[User] AS
[Employee].[Employees].CurrentMember.Properties("User")
SELECT
{([Measures].[User])} ON COLUMNS,
Filter(
{[Employee].[Employees].Members},
[Employee].[Employees].CurrentMember.Properties("User")=
VBAMDX!Right(
UserName(),
VBAMDX!Len(UserName()) -
VBAMDX!Instr(UserName(),"\")
)
) ON ROWS
FROM [Step-by-Step]
;
第二步实施允许集

第三步检验允许集:

这个结果的意义是:当你用MdxUser账户登录后,你可以访问这14个层次关系的成员,包括直接的和间接的。
4、实施Cell级别的限制(Implementing Cell-Level Restrictions)
重要:本段内容以上段内容为基础,因此,对应的MdxUser限制也基于上例。如果没有完成上例,请先完成第3部分的操作。
第一步:设计逻辑表达式
例11-10
SELECT
{([Measures].[Reseller Sales Amount])} ON COLUMNS,
{[Employee].[Employees].Members} ON ROWS
FROM [Step-by-Step]
;

例11-11
WITH
MEMBER [Measures].[Is Accessible] AS
Count(
Intersect(
Ascendants([Employee].[Employees].CurrentMember),
Filter(
{[Employee].[Employees].Members},
[Employee].[Employees].CurrentMember.Properties("User")=
VBAMDX!Right(
UserName(),
VBAMDX!Len(UserName()) -
VBAMDX!Instr(UserName(),"\")
)
)
)
) > 0
SELECT
{
([Measures].[Reseller Sales Amount]),
([Measures].[Is Accessible])
} ON COLUMNS,
{[Employee].[Employees].Members} ON ROWS
FROM [Step-by-Step]
;

第二步:实施设计
Count(
Intersect(
Ascendants([Employee].[Employees].CurrentMember),
Filter(
{[Employee].[Employees].Members},
[Employee].[Employees].CurrentMember.Properties("User")=
VBAMDX!Right(
UserName(),
VBAMDX!Len(UserName()) -
VBAMDX!Instr(UserName(),"\")
)
)
)
) > 0

第三步:验证限制
再次执行例11-10

重要:完成本例后请务必删除MdxUser和MdxUserGroup用户组。
小结:
本文介绍动态安全的相关内容,主要包括限制标准属性层次结构,限制父子层次结构、实施Cell级别的限制。下文将继续学习创建报表,也是本书的最后一部分内容。
参考资源:
1、MDX官方教程(http://msdn.microsoft.com/zh-cn/library/ms145506.aspx)
分享到:
相关推荐
### Microsoft SQL Server 2008 MDX Step by Step (Feb 2009) #### 知识点一:Multidimensional Expressions (MDX) 基础 **Multidimensional Expressions (MDX)** 是一种用于查询多维数据集的语言。MDX 提供了一种...
《Microsoft SQL Server 2008 Analysis Services Step by Step》随书光盘包含了大量实践性的文件,旨在帮助读者深入理解并掌握SQL Server 2008的Analysis Services(简称SSAS)这一强大的数据仓库和商务智能工具。...
《Microsoft SQL Server 2008 MDX Step by Step》是一本专为SQL Server数据库管理员、数据分析师和开发人员设计的教程,旨在深入探讨多维表达式(Multidimensional Expressions,简称MDX)在SQL Server 2008中的应用...
Provides information on the fundamentals of Microsoft SQL Server 2005 Analysis Services. Teach yourself the fundamentals of SQL Server Analysis Services—one step at a time. With this practical, ...
《SQL Server 2008 Step by Step》是微软出版社发布的一本针对SQL Server 2008的全面教程,适合初学者和有一定基础的数据库管理员。这本书通过逐步指导的方式,帮助读者掌握SQL Server 2008的核心功能和操作技巧。 ...
Provides information on the fundamentals of Microsoft SQL Server 2005 Analysis Services. Teach yourself the fundamentals of SQL Server Analysis Services—one step at a time. With this practical, ...
《Microsoft SQL Server 2008 MDX 步步为营》是微软出版社于2009年2月推出的一本专门针对SQL Server 2008中的多维表达式(Multidimensional Expressions,简称MDX)技术的实战指南。这本书详细介绍了如何在SQL ...
This title serves as an authoritative guide to Microsofts new "SQL Server 2012 Analysis Services" BI product and is written by key members of the Microsoft Analysis Services product development team....
电子书《Microsoft SQL Server 2008 Analysis Services Step by Step》很可能是逐步教程,涵盖了从安装配置到实际操作的整个过程。书中可能涉及以下内容: 1. **安装与配置**:如何在服务器上安装SQL Server 2008,...
《精通微软SQL Server 2008管理》 在IT领域,数据库管理是不可或缺的一环,而微软的SQL Server 2008作为一款广泛使用的数据库管理系统,深受企业和开发者的青睐。本文将深入探讨SQL Server 2008的核心管理知识,...
它起源于微软在1998年的SQL Server Analysis Services 7.0版本,现在已经成为一个标准化的语言,被其他OLAP(在线分析处理)供应商如Microstrategy Intelligence Server、Hyperion Essbase Server和SAS的Enterprise ...
SQL Server 2008是微软公司推出的一款关系型数据库管理系统,它在企业级数据管理、分析和报告方面表现出色。这款教程适用于初学者,旨在帮助用户掌握SQL Server 2008的基础知识和核心功能。 一、SQL Server 2008...
"Practical DMX Queries for Microsoft SQL Server Analysis Services 2008" contains more than 250 downloadable DMX queries you can use to extract and visualize data. The application, syntax, and results...
Provides information on the fundamentals of Microsoft SQL Server 2005 Analysis Services. Teach yourself the fundamentals of SQL Server Analysis Services—one step at a time. With this practical, ...
《Microsoft SQL Server 2012 Analysis Services 高级教程》是针对数据库管理员、数据分析师以及IT专业人士的一本深入指南,旨在帮助读者掌握SQL Server 2012中的Analysis Services(简称SSAS)的各项高级功能。...
7. **工具支持**:了解如何在Microsoft Excel和SQL Server Management Studio(SSMS)中使用MDX,以及如何配合Power Pivot等工具进行更高级的数据分析。 提供的资源,如PPT、视频和文档,将为学习者提供丰富的交互...
通过"MDX step by step"教程,读者将逐步学习如何构建这些查询,理解如何在多维环境中提取、分析和展示数据。书中每章的示例会帮助读者加深对MDX语法的理解,通过实际操作来探索不同场景下的应用。例如,可能有练习...