SSAS Tabular表格模型实现动态权限管理
最近忽然对SSAS产生了浓厚兴趣,我看博客园上也米有写关于SSAS 2016下表格模型实现动态权限管理的文章,最近鼓捣了一下微软的样例,鼓捣好了,把过程中遇到的一些问题写出来,抛砖引玉,也算给自己一个交代。
首先放出微软官网的教程:
https://docs.microsoft.com/zh-cn/power-bi/desktop-tutorial-row-level-security-onprem-ssas-tabular?from=singlemessage&isappinstalled=0
要点主要是SSAS Tabular表格模型在SSAS 2016之后多加了2个DAX函数,分别是username()和lookupvalue(),配合使用就可以返回需要在dim表中过滤的Key值,从而过滤返回结果的范围,本质上还是行筛选器的应用。
在微软的样例中,DAX表达式=DimSalesTerritory[SalesTerritoryKey]=LOOKUPVALUE(DimUserSecurity[SalesTerritoryID], DimUserSecurity[UserName], USERNAME(), DimUserSecurity[SalesTerritoryID], DimSalesTerritory[SalesTerritoryKey])的返回值只有一个,因为在配置表中这名用户只有一个区域Key,如果用户配置成了拥有多个区域的Key,也就是配置表中拥有多行记录,那么返回函数会返回多个Key值,无需修改DAX表达式。
所以我们依然需要在设计模型的时候添加角色,在角色中添加真正的用户,但是这个角色的含义是所有权限需要动态控制的用户的列表,理论上会添加很多人,但是只要添加好一次,在因为业务原因权限发生变动的时候,就无需重新修改和部署这个Tabular表格模型中的角色了。
还有一个需要注意的点是,我们在SSDT中开发Tabular表格模型项目的时候,需要本身运行SSDT的账号在SSAS实例下拥有admin权限,但是admin权限过大了,不会受到模型中角色的权限限制,这个无论是静态写死的角色还是动态赋权的角色都是如此,也符合微软一贯的权限管理模型模式,即管理员不受任何权限控制。那么如何在SSDT中使用在excel中测试这个选项来测试角色权限呢?过程有些曲折但是确实可行,我已经在我本地测试成功了,步骤如下:
1.使用ssas下具有admin权限的用户在SSDT中开发设计模型完毕,rebuild all success,然后关闭项目;
2.run as different user打开SSDT不好使,因为你run as different user确实打开了另一个用户上下文的SSDT,但是到使用execl中测试这个功能的时候,就是你当前登陆桌面使用的用户了,不是SSDT中你run as different那个了;
3.所以需要用真正需要测试权限的用户登陆项目所在机器的RDP,打开SSDT,process数据,但是又遇到权限不够的问题无法打开项目的问题,怎么办?
4.临时将需要测试权限的用户在SSAS中赋予admin权限,使这名用户可以成功在SSDT中打开项目,process数据,标志是可以在SSDT中看到数据行;
5.填充完数据之后,把这个普通用户的SSAS admin权限拿掉,然后再点击按钮,使用在excel中测试,用户名就选当前用户;
6.如果之前的模型设计,权限设置,行筛选器都配置的没有问题,那么在新打开的excel中就能看到过滤后的效果了。
所以动态权限的管理,无论是在多维数据集模型下还是在表格模型下,都是从dim 表中各个在事实表中关联的Key值上下手,首先想办法知道当前点开这个报表的人是谁,然后查找权限表,看这个人拥有哪些key值,然后只给他看他拥有key值的那些数据。
在权限表的设计上其实也有门道,因为这个权限表实际上是存在于SQL Server或者其他关系数据库里面的一张普通表,如何确保这个表的内容不被篡改?在拥有多个需要控制权限的维度时产生的大量笛卡儿积数据如何存放和维护?我本人的做法是,每一个模型中的dim表,专门设置一个权限表,比如模型中,fact表中有10个dim表的key值,那么至多我就会设计10个权限表,每个表单独维护,然后创建权限视图,把这10个表按照username()的返回值join起来,不丢任何一个列和行,然后在SSAS模型中添加这个权限视图,再跟fact表根据key值产生关联。
别问有没有图了,没图,微软的样例图很多。
BR
SSAS Tabular表格模型实现动态权限管理的更多相关文章
- SSAS Tabular 表格模型建模(关系)及部署
一.表格建模(SSAS 表格) 表格模型是 Analysis Services 中的内存中数据库. 使用最先进的压缩算法和多线程查询处理器,xVelocity 内存中分析引擎 (VertiPaq) ...
- Android 6.0 - 动态权限管理的解决方案
Android 6.0版本(Api 23)推出了很多新的特性, 大幅提升了用户体验, 同时也为程序员带来新的负担. 动态权限管理就是这样, 一方面让用户更加容易的控制自己的隐私, 一方面需要重新适配应 ...
- Android 6.0 - 动态权限管理的解决方案(转)
转自:http://www.cnblogs.com/dubo-/p/6018262.html Android 6.0 - 动态权限管理的解决方案 转载请标注 Android 6.0版本(Api 2 ...
- SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理|前后端分离(下)----筑基后期
写在前面 在上一篇文章<SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期>当中,我们初步实现了SpringBoot整合Shiro ...
- spring boot:spring security用mysql实现动态权限管理(spring boot 2.3.3)
一,动态权限管理的优点和缺点 1,优点: 因为控制权限的数据保存在了mysql或其他存储系统中, 可以动态修改权限控制,无需改动代码和重启应用, 权限变更时灵活方便 2,缺点: 权限的设置需要保存在 ...
- PowerBI 实现不同角色看到内容不同支持动态权限管理
首先,在PowerBIDesktop中进行设计,先设计一个权限表: 具体权限如下: 也就是说,这些用户账号在PowerBIService登录时,会分别代表这些用户,接下来会使用一个很重要的动态函数:U ...
- SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期
写在前面 通过前几篇文章的学习,我们从大体上了解了shiro关于认证和授权方面的应用.在接下来的文章当中,我将通过一个demo,带领大家搭建一个SpringBoot整合Shiro的一个项目开发脚手架, ...
- Android_动态权限管理的解决方式
本博文为子墨原创.转载请注明出处! http://blog.csdn.net/zimo2013/article/details/50478201 1.前言 (1).因为MIUI等部分国产定制系统也有权 ...
- shiro实现动态权限管理
用到shiro框架实现权限控制时,根据实际要求,权限在数据库增删改后都要把权限过滤链变化实时更新到服务器中. 1.配置文件里配置的filterchains都是静态的,但实际开发中更多的是从数据库中动态 ...
随机推荐
- linux 使用 jiffies 计数器
这个计数器和来读取它的实用函数位于 <linux/jiffies.h>, 尽管你会常常只是包含 <linux/sched.h>, 它会自动地将 jiffies.h 拉进来. 不 ...
- 节点列表和HTML集合
getElementsByName()和getElementByTagName()返回的都是NodeList集合. 而document.images和document0.forms的属性为HTMLCo ...
- 树莓派4安装ftp服务端
vsftpd是开源的轻量级的常用ftp服务器. 1,安装vsftpd服务器 (约400KB) sudo apt-get install vsftpd 2,启动ftp服务 sudo serv ...
- Java 学习笔记(16)——Java数据库操作
数据库操作是程序设计中十分重要的一个部分,Java内置JDBC来操作数据库 JDBC使用 JDBC--Java Database connecting Java数据库连接:本质上JDBC定义了操作数据 ...
- JMeter Web测试计划
在本节中,将学习如何创建测试网页的基本测试计划. 出于演示测试目的,我们将测试URL - https://www.yiibai.com/ 的网页性能. 创建JMeter测试计划 进入到JMeter安装 ...
- VRchat模型之unity
VRChat模型制作及上传总篇(包含总流程和所需插件):https://www.cnblogs.com/raitorei/p/12015876.html 0.新建工程, 导入VRCSDK及动态骨骼插件 ...
- java基础 -- 关键字static的用法
static关键字的基本作用就是方便在没有创建对象的情况下调用类的方法/变量, static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问. static ...
- rest_framework框架下的Django声明和生命周期
rest_framework框架下的Django声明和生命周期 Django声明周期(request) 客户端发起请求 请求经过wsgi wsgi: 是一个协议----web服务网关接口,即在web服 ...
- 洛谷$P2050\ [NOI2012]$美食节 网络流
正解:网络流 解题报告: 传送门$QwQ$ 昂开始看到$jio$得,哇长得好像上一题嗷$QwQ$ 然后仔细康康数据范围,发现,哇好像要几万个点,,,显然就$GG$了 但感$jio$思路方向好对的亚子? ...
- $Noip2011/Luogu1315$ 观光公交 贪心
$Luogu$ $Sol$ 觉得这题贪心要想很多事情,不适合我这种没脑子选手$ovo$.看题解还理解了很久. 最开始是这样想的:把所有的路段上的乘客按大小排个序用加速器就好了,这个想法被自己轻松$ha ...