最近忽然对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. H3C ping命令的输出

  2. C/C++ 获取键盘事件

    Windows 系统下的 vs 中可以使用 _kbhit() 函数来获取键盘事件,使用时需要加入 conio.h 头文件 #include <conio.h> #include <i ...

  3. chrome查看当前网页cookie内容

    按下F12,打开开发者工具 然后点开Application,在点击cookie左侧的小三角,选择网页,就可以看见对应的cookies了

  4. LuoguP5464 缩小社交圈

    LuoguP5464 缩小社交圈 背景:洛谷七月月赛T4 题目大意给定\(n\)个点,每个点的权值对应着一个区间\([l_i,r_i]\),两个点\(i,j\)有边当且仅当他们权值的并集不为空集,问有 ...

  5. ASP.NET WebForm Identity使用

    环境 win10企业版x64+visual studio 2017+.net 4.5 step1 基本使用+邮件确认+密码重置 https://docs.microsoft.com/en-us/asp ...

  6. 009.MFC_Spin

    数值调节按钮CSpinButtonCtrl属性 Alignment Auto Buddy Set Buddy integer成员函数 SetRange32() SetBase()

  7. MySQL基础之事务编程学习笔记

    MySQL基础之事务编程学习笔记 在学习<MySQL技术内幕:SQL编程>一书,并做了笔记.本博客内容是自己学了<MySQL技术内幕:SQL编程>事务编程一章之后,根据自己的理 ...

  8. easyUI dataGrid主从表点击展开问题

    昨天在公司写代码遇到了一个问题,就是在用easyUI做主从表的时候在查询之后点击展开的时候不能再次展开了.先说一下主从表我也是第一次用 效果如下图: 然后点击前面的小加号出现以下效果: 然而遇到了一个 ...

  9. 【转载】你不知道的 console,让 JS 调试更简单

    对于前端工程师,肯定不会对console陌生,但是,又能深入了解多少呢? Chrome控制台-开发者工具 windows按F12, MAC按Command + Option + C或Command + ...

  10. 清晰架构(Clean Architecture)的Go微服务: 日志管理

    良好的日志记录可以提供丰富的日志数据,便于在调试时发现问题,从而大大提高编码效率. 记录器提供的自动化信息越多越好,日志信息也需要以简洁的方式呈现,便于找到重要的数据. 日志需求: 无需修改业务代码即 ...