最近忽然对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表格模型实现动态权限管理的更多相关文章

  1. SSAS Tabular 表格模型建模(关系)及部署

    一.表格建模(SSAS 表格)   表格模型是 Analysis Services 中的内存中数据库. 使用最先进的压缩算法和多线程查询处理器,xVelocity 内存中分析引擎 (VertiPaq) ...

  2. Android 6.0 - 动态权限管理的解决方案

    Android 6.0版本(Api 23)推出了很多新的特性, 大幅提升了用户体验, 同时也为程序员带来新的负担. 动态权限管理就是这样, 一方面让用户更加容易的控制自己的隐私, 一方面需要重新适配应 ...

  3. Android 6.0 - 动态权限管理的解决方案(转)

    转自:http://www.cnblogs.com/dubo-/p/6018262.html Android 6.0 - 动态权限管理的解决方案   转载请标注 Android 6.0版本(Api 2 ...

  4. SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理|前后端分离(下)----筑基后期

    写在前面 在上一篇文章<SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期>当中,我们初步实现了SpringBoot整合Shiro ...

  5. spring boot:spring security用mysql实现动态权限管理(spring boot 2.3.3)

    一,动态权限管理的优点和缺点 1,优点: 因为控制权限的数据保存在了mysql或其他存储系统中, 可以动态修改权限控制,无需改动代码和重启应用,  权限变更时灵活方便 2,缺点: 权限的设置需要保存在 ...

  6. PowerBI 实现不同角色看到内容不同支持动态权限管理

    首先,在PowerBIDesktop中进行设计,先设计一个权限表: 具体权限如下: 也就是说,这些用户账号在PowerBIService登录时,会分别代表这些用户,接下来会使用一个很重要的动态函数:U ...

  7. SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期

    写在前面 通过前几篇文章的学习,我们从大体上了解了shiro关于认证和授权方面的应用.在接下来的文章当中,我将通过一个demo,带领大家搭建一个SpringBoot整合Shiro的一个项目开发脚手架, ...

  8. Android_动态权限管理的解决方式

    本博文为子墨原创.转载请注明出处! http://blog.csdn.net/zimo2013/article/details/50478201 1.前言 (1).因为MIUI等部分国产定制系统也有权 ...

  9. shiro实现动态权限管理

    用到shiro框架实现权限控制时,根据实际要求,权限在数据库增删改后都要把权限过滤链变化实时更新到服务器中. 1.配置文件里配置的filterchains都是静态的,但实际开发中更多的是从数据库中动态 ...

随机推荐

  1. Python中&、^与and、or

    导火索:给定两个列表,怎么找出他们相同的元素和不通的元素? list1 = [1, 2, 3, 4, 57, 8, 90] list2 = [2, 3, 4, 5, 6, 7, 8] lis = li ...

  2. dotnet 判断程序当前使用管理员运行降低权使用普通权限运行

    有一些程序是不想通过管理员权限运行的,因为在很多文件的读写,如果用了管理员权限程序写入的程序,其他普通权限的程序是无法直接访问的.本文告诉大家如何判断当前的程序是通过管理员权限运行,然后通过资源管理器 ...

  3. jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(二)

    引言:首先我们可以实现一键部署网站,但在实际生产环境网站部署完成之后,我们的开发隔三差五要修改下网站的内容,难道都要我们运维手动执行命令吗?没有一种方法使得开发人员修改完代码自己测试,部署上线呢,那这 ...

  4. jedis 连接池工具类

    maven <properties> <jedis.version>3.0.1</jedis.version> <junit.verion>4.12&l ...

  5. CITRIX VPX配置四层负载

    网络拓扑如下: Step1:开启四层负载特性 在Configuration->Traffic Management->Load Balancing上右键弹出菜单点击enable,如下图: ...

  6. CentOS7.6部署k8s环境

    CentOS7.6部署k8s环境 测试环境: 节点名称 节点IP 节点功能 K8s-master 10.10.1.10/24 Master.etcd.registry K8s-node-1 10.10 ...

  7. 【Docker】企业级镜像仓库harbor的搭建(http/https)及使用

    一:用途 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器. 二:安装docker-ce 环境:阿里云轻量应用服务器CentOS 7.3 这里通过yum Docker源仓 ...

  8. background新增属性

    今天解除了几个曾经没有用到的属性,所以想总结并且复习一下. background-origin属性:有三个属性值,分别是border-box,padding-box,content-box.看到bor ...

  9. MySQL的读写分离与主从同步数据一致性

    有没有做MySQL读写分离?如何实现mysql的读写分离?MySQL主从复制原理的是啥?如何解决mysql主从同步的延时问题? 高并发这个阶段,那肯定是需要做读写分离的,啥意思?因为实际上大部分的互联 ...

  10. 曹工说Spring Boot源码(7)-- Spring解析xml文件,到底从中得到了什么(上)

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...