PowerBI开发 第十八篇:行级安全(RLS)
PowerBI可以通过RLS(Row-level security)限制用户对数据的访问,过滤器在行级别限制数据的访问,用户可以在角色中定义过滤器,通过角色来限制数据的访问。在PowerBI Service中,workspace中的member能够访问Workspace中的Dataset,RLS不会限制数据的访问。
PowerBI 只支持Import 和 DirectQuery 连接模式,Live Connection to Analysis Services需要在on-premises模型中处理。也就是说,当数据模型采用Import模式,可以在PowerBI的数据模型中配置RLS;当dataset使用DirectQuery模式时,关系型数据源也可以在PowerBI中配置RLS,比如SQL Server。但是对于Analysis Services 或 Azure Analysis Services数据源,由于使用的 lives connection,需要在模型中配置RLS,而不是在PowerBI Desktop中。
行级安全实际上分为两块:开发人员需要先在PowerBI Desktop中定义Role和身份验证的规则,然后在PowerBI Service中添加Role的成员。
一,在PowerBI Desktop中定义Role和Rule
在PowerBI Desktop中定义Role和Rule,当把PBI文件发布(publish)时,也会把Role的定义发布到PowerBI Service。
1,定义Role和Rule
从PowerBI Desktop的 Modeling菜单中选择“Manage Roles”

点击“Create”按钮创建Role:

在“Table filter DAX expression”中输入DAX表达式,这个表达式返回True或False,这个表达式就是Role的规则(Rule)。

你也可以输入在表达式中嵌入函数username(),注意该函数返回的格式是:DOMAIN\username,也可以使用函数 userprincipalname() 返回用户安全主体名称,格式是:username@contoso.com
2,动态的RLS
用户不能在PowerBI Desktop中把一个user 分配到一个role中,但是可以在PowerBI Service中进行分配。通过使用函数username() 或 userprincipalname(),可以实现动态的RLS设置。
默认情况下,不管关系设置的是单向过滤方向,还是双向过滤方向,RLS都是使用单向的过滤器来过滤用户。开发人员可以手动启用双向交叉过滤的RLS,这只需要勾选“Apply security filter in both directions”。

3,验证Role
当创建Role之后,可以通过“View as”菜单来进行验证。

选择要验证的Role,或者Other user。

当选择特定的Role或Other user之后,根据这个Role或 Other user把报表的数据重新渲染。
二,在PowerBI Service中管理数据模型中的安全设置
开发人员可以在PowerBI Service中管理模型的安全设置。
1,打开菜单
在PowerBI Service中,从Workspace中选择Dataset,打开“Open menu”


2,选择 Security
Security 菜单将打开Role-Level Security页面,这是为你在PowerBI Desktop中创建的Role添加member的地方。只有dataset的Owner可以看到Security 菜单。
用户只能在PowerBI Desktop中创建Role,只能在PowerBI Service中为Role添加member。

3,为Role添加member
在PowerBI Service中,开发人员可以通过email 地址、用户的名称、或者Security Group的名称来添加member。

在为Role添加成员之后,Role名称后面会显示成员的数量。

4,验证角色
在PowerBI Service中,用户可以通过(...)来验证Role,当选择“Test as role”时,

开发人员会以角色来查看报表,报表会显示“Now viewing as: role_name”,如下图所示:

如果要测试其他用户或角色,可以点击“Now viewing as”,弹出以下窗口:

要返回常规窗口,请点击“Back to Row-Level Security”。
三,动态RLS设置
通过使用函数username() 或 userprincipalname(),可以实现动态的RLS设置。
username()函数返回的格式是:DOMAIN\username,函数 userprincipalname() 返回用户安全主体名称,格式是:username@contoso.com。
案例:用户通过邮箱登陆,PowerBI通过邮箱配置来限制用户查看数据。
1,在PowerBI Desktop中定义Role和Rule
step1:建立一个用户表
用户表的结构如下图(表名:DM_D_Permission)

step2,建立Role和Table filter之间的关系

step3,建立关系表
在建立多对一的关系时,一定要注意在Cross Filter Direction中,选择Both并点选 “Apply security filter in both directions”

选择OK,在PowerBI Desktop上的操作完成,需要Publish到PowerBI Service上。
2,在PowerBI Service中定义成员
选择Report的Dataset,选择“Security”:

为角色增加成员,成员可以是email 地址、用户的名称、或者Security Group的名称。

PowerBI Service上的配置完成,每一个访问Report的用户都会被Dataset上的安全设置所限制。
参考文档:
Row-Level Security with PowerBI
PowerBI开发 第十八篇:行级安全(RLS)的更多相关文章
- Android UI开发第二十八篇——Fragment中使用左右滑动菜单
Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...
- PowerBI开发 第十五篇:Power BI的行级安全
Power BI支持行级安全(Row-Level Security,RLS)的权限控制,用于限制用户对Dashboard.报表和DataSet的访问.用户浏览的报表是相同的,但是看到的数据却是不同的. ...
- PowerBI开发 第十二篇:钻取
钻取是指沿着层次结构(维度的层次)查看数据,钻取可以变换分析数据的粒度.钻取分为下钻(Drill-down)和上钻(Drill-up),上钻是沿着数据的维度结构向上聚合数据,在更大的粒度上查看数据的统 ...
- PowerBI开发 第十四篇:使用M公式添加列
PowerBI的查询编辑器使用Power Query M公式语言来定义查询模型,它是一种富有表现力的数据糅合(Mashup)语言,一个M查询可以计算(Evalute)一个表达式,得到一个值. 对于开发 ...
- PowerBI开发 第十六篇:PowerBI Service基本概念
从总体上来看,PowerBI Service 有4个主要的构建模块,分别是dashboards.reports.workbooks 和 datasets,这四个模块都是目录,位于workspaces目 ...
- PowerBI开发 第十五篇:DAX 表达式(时间+过滤+关系)
DAX表达式中包含时间关系(Time Intelligence)相关的函数,用于对日期维度进行累加.同比和环比等分析.PowerBI能够创建关系,通过过滤器来对影响计算的上下文. 一,时间关系 DAX ...
- PowerBI开发 第十九篇:基于Page创建Tooltip
在PowerBI 报表中,常规的Tooltip是一段文本,当光标悬停在Visual上,Visual上方会自动显示Tooltip的文本.PowerBI 支持用户自定义内容丰富的Tooltip,用户通过创 ...
- Python之路【第十八篇】:Web框架们
Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...
- Egret入门学习日记 --- 第十八篇(书中 8.5~8.7 节 内容)
第十八篇(书中 8.5~8.7 节 内容) 其实语法篇,我感觉没必要写录入到日记里. 我也犹豫了好久,到底要不要录入. 这样,我先读一遍语法篇的所有内容,我觉得值得留下的,我就录入日记里. 不然像昨天 ...
随机推荐
- Markdown(3)Typora快捷键
Typora(3)快捷键 一.快捷键列表 操作内容 快捷键 助记词 1. 标题 Ctrl + 数字 1-6 2. 段落 Ctrl + 数字 0 3. 粗体 Ctrl + B (B) Bold 4. 斜 ...
- Dos常用命令整理
Dos常用命令整理 打开cmd的方法 开始菜单 -> 系统 -> 命令提示符 组合键Win+R打开运行 -> 输入cmd 在任意文件夹下Shift+鼠标右键 -> 在此处打开命 ...
- $nextTick解决Vue组件卸载在加载合并的问题
情况是这样的,父子组件都是复选框,点击父组件的复选框,子组件的复选框要显示并全选,取消复选框,子组件隐藏.子组件显隐我用的 v-if ,使用created钩子函数来使子组件处于全选状态. 但是出现的问 ...
- Java 集合框架 01
集合框架· ArrayList 和 Vector 对象数组的概述和使用 * A:案例演示 * 需求:我有5个学生,请把这5个学生的信息存储到数组中,并遍历数组,获取到每个学生的信息 Student[] ...
- C#的foreach遍历循环和隐式类型变量
C#的foreach遍历循环和隐式类型变量 foreach遍历循环 foreach (<baseType> <name> in <array>>) { //c ...
- python面试题总结
Python语言特性 1. Python的函数参数传递 看两个如下例子,分析运行结果 #代码1 a = 1 def fun(a): a = 2 fun(a) print(a) #1 #代码2 a ...
- Java方法:命令行传参,重载,可变参数,递归
Java方法:System.out.println()//系统类.out对象.输出方法Java方法是语句的集合,他们在一起执行一个功能方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中 ...
- Python基础(1)——变量和数据类型[xiaoshun]
目录 一.变量 1.概述 Variables are used to store information to be referenced(引用)and manipulated(操作) in a co ...
- Hi3559AV100 NNIE开发(5)mobilefacenet.wk仿真成功量化及与CNN_convert_bin_and_print_featuremap.py输出中间层数据对比过程
前面随笔给出了NNIE开发的基本知识,下面几篇随笔将着重于Mobilefacenet NNIE开发,实现mobilefacenet.wk的chip版本,并在Hi3559AV100上实现mobilefa ...
- weblogic之cve-2015-4852分析(重写)
前言 有时间打算分析weblogic历史漏洞,但是又要面试啥的,没空.又刚好最近面试会问weblogic反序列化.具体啥时候分析weblogic反序列化,可能会在护网后,或者我开学了再分析.期间可能我 ...