SQL Server 2008中SQL应用系列及BI学习笔记系列--目录索引
导读:本文主要介绍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]
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://public.bay.livefilestore.com/y1pt6Se3kM58er--o2QcFyjrtfF3tBKK8eQOmt6mh4_kGSPuf99mBxlEsQ5SbtnitJvB0zyVMkv5K6PUs2vD8TDUw/2011-12-2%2014-58-47.png?psid=1
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]
;
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://public.bay.livefilestore.com/y1pbg884pvppZWFcHJWSbpNpdUlIM_sMYAdJYRX6Puvt3sT_9C1wQGJY_7miSmMaawqIQVarRhdoAH2DraredxGCw/2011-12-2%2016-52-10.png?psid=1
第二步:实施设计
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)
邀月注:本文版权由邀月和CSDN共同所有,转载请注明出处。
助人等于自助! 3w@live.cn
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com