SSAS中CUBE行权限数据级权限控制

原文:SSAS中CUBE行权限数据级权限控制

去年做了一个数据仓库的项目,其中涉及到了CUBE数据级权限的控制。在网上找这方面的资料,找到一个[BI] 通用数据级权限控制解决方案的实现(二):Cube中的角色设置与数据级权限控制。根据这个大牛的思路,做完之后发现有几个问题:

1. 传递给CUBE的用户必须是域用户或者数据库服务器WINDOWS用户。如果BI系统不是用的AD域认证而是传统的FORM认证,那么,BI里的用户需要对应一个WINDOWS用户。

2. 另外的WEB程序里保存对cube的角色权限之后,用户访问cube数据的权限控制并不能即时刷新,需要到SSAS数据库里手动保存一下角色,权限配置才能够生效。

 

首先添加一个SSAS的角色Role,注意角色的数据库权限设置不能勾选完全控制,不然后面我们配置的权限就没有任何意义。在成员身份为角色添加用户和组,按前面帖子里说的添加everyone,其实后面按照我的方法,这里不需要添加everyone,只需要添加一个最大权限的用户即可。如图一(还是添加的everyone)

                  图一

在左侧数据源及多维数据集的选项中需要给数据源及多维数据集读的权限。

在维度数据里选择需要设置权限的维度及维度属性,我这里的是一个父子级的维度,成本中心,选择成本中心层次结构。如图二,

 

                  图二

在允许的成员集里,我写的字符串如下

StrToSet(BII.GetCubeDimPerMems(CustomData(),"WEGODW","成本中心"))

其中,还是使用MDX的函数StrToSet来将我们自己写的DLL查询出的维度成员列表转换成MDX能够识别的Member Set。

GetCubeDimPerMems函数是我自己写的一个查询某个用户在数据库中保存的能够访问的某个维度的成员列表的字符串。第一个参数也是这个方法的核心,需要用到MDX的一个函数CustomData()。

CustomData(MDX)

如果已定义,则返回 CustomData 连接字符串属性的值;否则,返回 null。

返回值:CustomData 函数可以检索 CustomData 连接字符串属性并传递多维表达式 (MDX) 函数和语句将要使用的配置设置,例如,UserName (MDX) 和 CALL 语句 (MDX)。 例如,该函数可以用在动态安全表达式中,用于在 CustomData 连接字符串属性中选择允许的集成员或拒绝的集成员。

 

这里第二个和第三个参数没啥意义,我这里表示是我CUBENAME以及DIMNAME,大家可以自己随意发挥。

查询结果大致格式如下:

"[成本中心].[成本中心层次].&[1],[成本中心].[成本中心层次].&[2],[成本中心].[成本中心层次].&[3],[成本中心].[成本中心层次].&[4]"

 

那我们如何将我们WEB程序里的程序传递给SSAS呢?我这边使用了WEB.CONFIG里的connectingstring的方式,用连接字符串的方式将用户传递给SSAS,使之能够知道是哪个用户连接并打开了数据库。连接字符串如下:

string connectionString = "Provider=MSOLAP.5;Data Source=http://172.0.0.1:8088/OLAP/msmdpump.dll; Persist Security Info=true;Password=xxxxx;User ID=administrator;CustomData=UserName;initial catalog=DBName;Cube Name=CubeName;"

其中,User ID是我们需要连接SSAS库的最大权限的用户(管理员账户),相当于SQL SERVER里的SA账户。

重点就是CustomData属性,将我们WEB程序里的用户名,通过CustomData传递给SSAS,在SSAS里用MDX函数CustomData()来接收。比如我在connectionString里定义CustomData=zhangsan,在SSAS里通过CustomData()就能够得到”zhangsan“这个用户。

这里还有一点需要注意,SSAS数据库必须以HTTP的方式发布到IIS,这样才能够远程访问。

 

混了这么久园子,第一次写东西,算是对自己做过东西的一点总结,班门弄斧,还望各位前辈多多指教。

 

 

时间: 2024-07-29 01:24:03

SSAS中CUBE行权限数据级权限控制的相关文章

在Excel表格中按行对数据排序的方法

  在Excel表格中按行对数据排序的方法          1.启动Excel 2013并打开工作表,选择工作表中的所有数据.打开"排序"对话框,单击"选项"按钮打开"排序选项"对话框,在"方向"栏中选择"按行排序"单选按钮,如图1所示. 图1 选择"按行排序"单选按钮 2.单击"确定"按钮关闭"排序选项"对话框,再在"排序"

如何用Ant命令读取文本文件中每行的数据了,谢谢!

问题描述 如何用Ant命令读取文本文件中每行的数据了,谢谢! 解决方案 解决方案二:没有人知道吗?谢谢!解决方案三:师兄,你好,我是今年即将加入深圳华为产品数据部的应届生,您能给我讲讲您这么多年在这个部门的感受吗?比如:工作压力.假期.待遇等等.我表示不胜感激涕零解决方案四:ant留了很多接口,你可以调用java程序,或者系统的命令来读本地文件.如果是properties文件的话,好像不用调用外部程序ant也可以load进来.去apache找doc看看吧

权限管理最佳实践:三&四,数据级权限管理方案探讨

问题描述 内容比较多,也有不少代码,粘贴过来太累了.感兴趣的点击下面链接: 解决方案 解决方案二:感谢分享!解决方案三:好东西...解决方案四:lz大哥,给我介绍一下,你推荐的这个都有哪些优点,缺点,这个目前怎么样,火不,用的人多吗?解决方案五:我点击超链为啥是404呢真相呢天理呢?解决方案六:我点击后的效果和4楼的效果是一样一样的!解决方案七:我和5楼一样解决方案八:demo好像特别卡解决方案九:点击看不了,什么原因?

asp.net如何得到GRIDVIEW中某行某列值的方法

根据某列的值改变其样式最好的方法是在GridView的DataRowBound事件中想办法.在GridView中的行绑定数据后将立即执行 DataRowBound事件.DataRowBound事件使用GridViewRowEventargs类作为事件变量.通过事件变量你能够利用 GridViewRowEventArgs属性操作已经绑定数据的行. 复制代码 代码如下: protected void GridView1_RowDataBound(object sender, GridViewRowE

asp.net如何得到GRIDVIEW中某行某列值的方法_实用技巧

根据某列的值改变其样式最好的方法是在GridView的DataRowBound事件中想办法.在GridView中的行绑定数据后将立即执行DataRowBound事件.DataRowBound事件使用GridViewRowEventargs类作为事件变量.通过事件变量你能够利用GridViewRowEventArgs属性操作已经绑定数据的行. 复制代码 代码如下: protected void GridView1_RowDataBound(object sender, GridViewRowEve

oracle能给表中数据赋予权限么?

问题描述 oracle能给表中数据赋予权限么? 现在我有一张教师表和一张学生学籍表,需要让教师具有查看学生学籍的权限能不能实现? 如果能实现,该怎么实现?(请注意,这里是教师表,不是oracle用户) 解决方案 不能满足你的要求,你这个授权需要通过自己的业务逻辑去实现.orzcle中的授权是针对oracle用户的授权,你这个是针对业务数据的授权,oracle是搞不定的.可以增加角色表,在角色中的用户都可以查看学生学籍 解决方案二: 你自己都说了不是oracle用户, 你可以判断用户是不是存在与教

java按钮级权限管理设计

问题描述 javaweb项目权限管理模块开发如果设计到按钮级别的话数据库和后台该如何设计以及前台页面表格数据如何去控制按钮级权限的显示 解决方案 解决方案二:你好,简单的说下:1,数据库最少要有用户表,角色表和权限表.权限表又可以分为模块权限和模块权限下的子权限.也就包括了前台的按钮权限.2,他们之间都用多对多的关系就行.3,获取到用户就可以得到他所有的权限.在前台用jstl表达式判断就行啦.我说这种是特别简单.传统的设计方案,只应付小项目.现在好多公司都有自己的权限框架,所以这块也很少接触.还

WinForm/MIS项目开发之中按钮级权限实践

一.前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本.缩短开发时间,快速适应市场变化的目的.      AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC.ORM.SOA.分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的

android 中添加了读写文件的权限,却报(Permission denied)错误

问题描述 android 中添加了读写文件的权限,却报(Permission denied)错误 android 中添加了读写文件的权限,却报open failed: EACCES (Permission denied) 太坑人了! 添加了权限 //代码部分: File file2 = new File(Environment.getExternalStorageDirectory(),"file2.txt"); file2.setWritable(true); file2.setRe