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

简介: 原文:SSAS中CUBE行权限数据级权限控制去年做了一个数据仓库的项目,其中涉及到了CUBE数据级权限的控制。在网上找这方面的资料,找到一个[BI] 通用数据级权限控制解决方案的实现(二):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,这样才能够远程访问。

 

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

 

 

目录
相关文章
|
SQL 数据安全/隐私保护
通用数据级别权限的框架设计与实现(3)-数据列表的权限过滤
查看上篇文章通用数据级别权限的框架设计与实现(2)-数据权限的准备工作,我们开始数据列表的权限过滤. 原理:我们在做过滤列表时,根据用户权限自动注入到相关SQL中,实现相关过滤,如果拥有全部权限,则不生成相关SQL片段 首先我们来分析一下数据列表的SQL 能看到所有数据的SQL SELECT role.
1119 0
|
9月前
|
SQL 安全 关系型数据库
php开发实战分析(8):mysql类库的操作高级使用API开发(字段操作、权限分配、日期格式、跨表查询,数据分表)
php开发实战分析(8):mysql类库的操作高级使用API开发(字段操作、权限分配、日期格式、跨表查询,数据分表)
299 0
|
数据安全/隐私保护
15-企业权限管理-方法级别权限控制
15-企业权限管理-方法级别权限控制
15-企业权限管理-方法级别权限控制
|
SQL BI 数据安全/隐私保护
RBAC、控制权限设计、权限表设计 基于角色权限控制和基于资源权限控制的区别优劣
RBAC、控制权限设计、权限表设计 基于角色权限控制和基于资源权限控制的区别优劣
510 0
RBAC、控制权限设计、权限表设计 基于角色权限控制和基于资源权限控制的区别优劣
|
数据库
SAP Basis DEBUG改表数据权限角色设计
SAP Basis DEBUG改表数据权限角色设计
SAP Basis DEBUG改表数据权限角色设计
不同的S/4HANA系统,同一创建用户的功能,因为权限不同而造成的差异
不同的S/4HANA系统,同一创建用户的功能,因为权限不同而造成的差异
不同的S/4HANA系统,同一创建用户的功能,因为权限不同而造成的差异
SAP不同的产品是如何支持用户创建自定义字段的
SAP不同的产品是如何支持用户创建自定义字段的
105 0
SAP不同的产品是如何支持用户创建自定义字段的
|
SQL 存储 数据库
数据权限这样设计,你觉得如何?
在项目实际开发中我们不光要控制一个用户能访问哪些资源,还需要控制用户只能访问资源中的某部分数据。 控制一个用户能访问哪些资源我们有很成熟的权限管理模型即RBAC,但是控制用户只能访问某部分资源(即我们常说的数据权限)使用RBAC模型是不够的,本文我们尝试在RBAC模型的基础上融入数据权限的管理控制。
2761 1