《Expert Cube Development with Microsoft SQL Server 2008 Analysis Services》读书笔记第九
SQL Server 2008中SQL应用系列及BI学习笔记系列--目录索引在上文中,我们简单回顾了Analysis Services(以下简称AS,邀月注)的角色和windows用户组等有关管理安全的基础知识,本文将继续关注数据安全(Data Security)。
二、Analysis Services安全功能(续一)
5、数据安全(Data Security)
可以实现三种不同类型的数据安全性:我们可以授予角色以访问整个cube的成员的权限;我们可以授予对一个Cube数据的访问,可以拒绝访问单个Cell(Cell安全),或者维度结构层次上的个别成员(Dimension安全)。
(1)对Cube授予读权限
用户访问一个Cube中的任何数据之前,他们必须是一个对该Cube具有读取权限的角色成员。通过如下界面授予读权限。
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://public.sn2.livefilestore.com/y1pRMK60eTKt_XGpjCT8EX16qeMENxbVahnOXeF1IAqPKL74cQL3aMCMfFiySEn-Xyb6qplKF4kndt6EOsIpiwerg/2012-5-3%2010-00-40.png?psid=1
如果设置了Cube上的写回(WriteBack),我们还可以控制角色是否可以写回Cube的授予读/写权限。最后,如果我们想要角色成员,能够运行钻取查询和创建本地Cube,我们可以授予权限“Local Cube/Drillthrough Access”。
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://public.sn2.livefilestore.com/y1pxuRwVMDP1FpZShWZsIv8xao937ZtSVk0d8eNiQNh33_4EuLWWDwfLdEKuCgcJlq_gGaDPvVNY-ekJzR7EyZUnA/2012-5-3%2010-05-59.png?psid=1
(2)Cell安全
Cell的安全性配置使用三个MDX表达式返回布尔值。这三个表达式,让我们定义哪些Cube的Cell可以被读或写回。Cube中的每一个Cell被评估,如果返回true,那么我们可以读取或写入cell,如果返回false,则不。
我们看一个例子,如果,我们在Role编辑界面,检查Cell数据选项卡是否启用“read”权限,输入如下表达式:
..CurrentMember IS ..&
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://public.sn2.livefilestore.com/y1p22qnEJh7miqylyQjHOXFj5o8o6sF-o5qo-aRklnBaM2YM-ME1iPyqQIEgXmwiS4jEHtl_4ycdDLcQZeEcvgeZA/2012-5-3%2010-16-41.png?psid=1
这样,用户将只能看到Sales Territory维度中Sales Territory Country层次的当前成员是Canada的Cell。在该角色下,我们查询Cube,如下:
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://public.sn2.livefilestore.com/y1pRMK60eTKt_UpxJaVrjJVdxJ4jIup4NXqSrYRtN4KLpGqk64wXXsHpnPfVpS-lDrl_s0sZWhLGZNU_K3gN_yO8A/2012-5-3%2012-47-56.png?psid=1
这个结果表明:
A:即便角色只能访问加拿大的数据,但还是看到了其他国家,只是不能访问的数据用Null代替,当然也可以用#N/A。这可以在"Secured Cell Value"中设置。
B:授予访问一个国家也授予访问该该国的所有地区。这是因为国家和地区之间有一个定义的属性关系,所以,当选择一个国家的CurrentMember在查询时因为地区的变化引起地区所在的国家的变化。授予属性的成员访问权限,将会同时授予与该属性有直接或间接的关系的低颗粒度属性,但不会发生在更高的颗粒度属性,所以North American成员和总计(这是在层次结构中的所有成员),不能访问。
最后这一点引发了另一个问题:如果该角色的用户从Sales Territory没有选择任何选项而查询Cube会发生什么?
我们看下图:
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://public.sn2.livefilestore.com/y1pT8_Na3snnPHTy51RMZ_FJhkH7FuVXVBrcd7iWLyMYXnVpbKmAyERdo6B89n0PL1jjc0kxeBS2TvYtXlrAIbBgg/2012-5-3%2015-53-40.png?psid=1
这是因为:默认成员是All Members,无权限访问,而选择"Canada"时可以读取。
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://public.sn2.livefilestore.com/y1pT8_Na3snnPH4pn4eoO4UsL5ecIucpoBo27eq0plbLYHcheoM2Khn_kkm8nUUQliBpJhqLMFQqZUAh2uYrIiYQg/2012-5-3%2015-56-27.png?psid=1
Cell级别的安全控制也可用于度量。例如,读权限使用这个表达式:
(.CurrentMember IS .)
OR
(.CurrentMember IS .)
该条件过滤后的效果如下:
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://public.sn2.livefilestore.com/y1pei6L9QAXi-xRAH7Pnbxvhv_1oP5YwlQNs7Vc7iakpPE3IzKnkzR_U2pfz7XFsd6JrPsLf2qKESrIvBOU8LNP3Q/2012-5-3%2015-59-50.png?psid=1
如果我们希望进一步,用户能够看到所有的国家的Sales Amount,但Total Product Cost仅限于加拿大,我们可以使用:
.CurrentMember IS .
OR (
.CurrentMember IS .
AND
..CurrentMember
IS ..&
) OR
.CurrentMember IS .
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://public.sn2.livefilestore.com/y1pzdFF2uN1n9_5pIrH4wJ-FDH6gNDy0aMIZXye71VVuGzip4X2YisGxVAUyxB-L6gAD8XYLcyiHekT_TKExTsl7g/2012-5-3%2018-47-41.png?psid=1
注意因为Gross Profit=Sales Amount-Total Product Cost这个计算关系,所以实际上这三个字段都是可见的。
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://public.sn2.livefilestore.com/y1p7bQZvMdfKOYIO40oYyT9dg7vBrdaiw9SzZ9VHwERsLUpW30CB-iB6Y-dOFFoGJGblDL84WzCZU4cnbmgYJiCTw/2012-5-3%2018-40-16.png?psid=1
那么如何真正控制,让Gross Profit的读取权限完全符合我们的预期呢?关键的一步在于上述的表达式不应写在"Read Permissions",而应该写在"Read-Contigent Permissions"中
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://public.sn2.livefilestore.com/y1p7bQZvMdfKOYn2D-wtlYygsWBuQ5A1dH1sV2NNEFrb3Hwc5FxdPBLJEIwex0S9VHEZcUUnw909EB185JzX9igRA/2012-5-3%2018-41-36.png?psid=1
http://onexin.iyunv.com/source/plugin/onexin_bigdata/https://public.sn2.livefilestore.com/y1pzdFF2uN1n98BAC_OM_nvLfpyCq_FAhQH4keuBCJ2BLWVtiWqmrUaOW60HgquSCKlKDT8tIS_99XUtdX8OMFGKQ/2012-5-3%2018-01-18.png?psid=1
本文主要学习Cube的读取和Cell安全,下节将继续了解数据安全(Data Security)中的维度安全和如何应用安全到度量,欢迎关注。
页:
[1]