《Expert Cube Development with Microsoft SQL Server 2008 Analysis Services》读书笔记第九章:保护Cube(二)
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具有读取权限的角色成员。通过如下界面授予读权限。
如果设置了Cube上的写回(WriteBack),我们还可以控制角色是否可以写回Cube的授予读/写权限。最后,如果我们想要角色成员,能够运行钻取查询和创建本地Cube,我们可以授予权限“Local Cube/Drillthrough Access”。
(2)Cell安全
Cell的安全性配置使用三个MDX表达式返回布尔值。这三个表达式,让我们定义哪些Cube的Cell可以被读或写回。Cube中的每一个Cell被评估,如果返回true,那么我们可以读取或写入cell,如果返回false,则不。
我们看一个例子,如果,我们在Role编辑界面,检查Cell数据选项卡是否启用“read”权限,输入如下表达式:
[Sales Territory].[Sales Territory Country].CurrentMember IS [Sales Territory].[Sales Territory Country].&[Canada]
这样,用户将只能看到Sales Territory维度中Sales Territory Country层次的当前成员是Canada的Cell。在该角色下,我们查询Cube,如下:
这个结果表明:
A:即便角色只能访问加拿大的数据,但还是看到了其他国家,只是不能访问的数据用Null代替,当然也可以用#N/A。这可以在"Secured Cell Value"中设置。
B:授予访问一个国家也授予访问该该国的所有地区。这是因为国家和地区之间有一个定义的属性关系,所以,当选择一个国家的CurrentMember在查询时因为地区的变化引起地区所在的国家的变化。授予属性的成员访问权限,将会同时授予与该属性有直接或间接的关系的低颗粒度属性,但不会发生在更高的颗粒度属性,所以North American成员和总计(这是在层次结构中的所有成员),不能访问。
最后这一点引发了另一个问题:如果该角色的用户从Sales Territory没有选择任何选项而查询Cube会发生什么?
我们看下图:
这是因为:默认成员是All Members,无权限访问,而选择"Canada"时可以读取。
Cell级别的安全控制也可用于度量。例如,读权限使用这个表达式:
([Measures].CurrentMember IS [Measures].[Sales
Amount])
OR
([Measures].CurrentMember IS [Measures].[Tax
Amount])
该条件过滤后的效果如下:
如果我们希望进一步,用户能够看到所有的国家的Sales Amount,但Total Product Cost仅限于加拿大,我们可以使用:
[Measures].CurrentMember IS [Measures].[Sales Amount]
OR
(
[Measures].CurrentMember IS [Measures].[Total Product
Cost]
AND
[Sales Territory].[Sales Territory Country].CurrentMember
IS
[Sales Territory].[Sales Territory Country].&[Canada]
)
OR
[Measures].CurrentMember IS [Measures].[Gross Profit]
注意因为Gross Profit=Sales Amount-Total Product Cost这个计算关系,所以实际上这三个字段都是可见的。
那么如何真正控制,让Gross Profit的读取权限完全符合我们的预期呢?关键的一步在于上述的表达式不应写在"Read Permissions",而应该写在"Read-Contigent Permissions"中
本文主要学习Cube的读取和Cell安全,下节将继续了解数据安全(Data Security)中的维度安全和如何应用安全到度量,欢迎关注。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2011-05-03 SSIS导入IIS日志的简单步骤(含代码)
2011-05-03 SQL Server 2008中原生的分层数据类型:hierarchyid
2010-05-03 《Microsoft Sql server 2008 Internal》读书笔记--第七章Special Storage(2)
2010-05-03 《Microsoft Sql server 2008 Internals》读书笔记--第七章Special Storage(1)