PowerBI开发 第十五篇:Power BI的行级安全

Power BI支持行级安全(Row-Level Security,RLS)的权限控制,用于限制用户对Dashboard、报表和DataSet的访问。用户浏览的报表是相同的,可是看到的数据倒是不一样的。express

RLS内部经过DAX函数 username() 和 userprincipalname()来实现,RLS使得PowerBI可以在行级别上对用户访问的数据进行限制。这两个函数在PowerBI Desktop中返回的都是用户的信息,只不过格式不一样:安全

  • username() :返回 domain\user_name
  • userprincipalname() :返回 user_name@domain.com

这两个函数在PowerBI Service中返回的格式是相同的:user_name@domain.com。若是须要发布到PowerBI Service中,建议使用 userprincipalname()函数来建立过滤规则。dom

一,实现RLS的组件

RLS的主要组件是:Users、Roles和Rules。用户访问数据时,RLS按照角色中定义的规则对用户的访问进行控制。函数

  • Users:浏览报表的用户,使用user name 或 email address 来惟一标识。
  • Roles:用户属于Role,一个角色是一个Rule的容器。
  • Rules:规则(Rule)是过滤数据的断言(Predicate)。 

在PowerBI Desktop中建立角色和规则,当发布到PowerBI Service中时,角色和规则也会发布到PowerBI Service中,报表开发人员须要在PowerBI Service中对DataSet的Security进行配置。spa

二,建立用户权限表和关系

实现RLS的关键一步是配置用户权限表,用户权限表用于指定用户有权限访问的数据,而关系是RLS可以起做用的基础,经过关系的交叉过滤功能实现用户访问数据的行级控制。excel

举个例子,有以下用户权限表:code

在本例中,咱们在规则中使用userprincipalname()函数,UserName列是用户的邮件地址,Product列是用户能够访问的产品类型,一个User能够访问多个Product。该表和DimProductCategory建立关系时,设置为“many to 1”的双向关系,经过UserName来过滤用户能够访问的Product。blog

三,建立角色和规则

有了用户权限配置表以后,接下来就是建立角色和规则,角色是用户的集合,角色中的全部用户遵照相同的规则;规则是定义用户是否有访问数据的权限。ip

在Modeling 选项卡中,选择“Manager Roles”:ci

点击“Create”按钮,建立一个Role,并命名角色。从Tables列表中添加Filter,在“Table filter DAX expression” 中输入DAX表达式,也就是建立规则,用于对用户进行过滤:

为了确保规则的正常运行,点击“View as Roles”,查看规则运行的状况:

也能够选择Other user,输入一个用户名称,检查规则对该用户产生的效果。

四,管理角色和规则

在建立角色时,能够建立一个admin的角色,能够访问全部的数据,设置DAX表达式:

UserName='admin@domain.com'

对于其余用户,其访问数据的权限受到限制,建立常规的角色,设置DAX表达式:

UserName = userprincipalname()

把PowerBI发布到PowerBI Service中,须要在数据模型中管理RLS。在PowerBI Service的Datasets中,点击Security,把用户添加到角色中:

把用户或用户组添加到角色中,用户组中的用户有权限访问报表。在访问报表时,userprincipalname()函数返回的是用户的邮件地址,而不是用户组的邮件地址,从而实现用户的权限控制:

报表管理人员,能够建立一个用户组,把用户组添加到角色中,并经过用户组来管理User对报表的访问,以实现RLS。

 

参考文档:

Row-level security (RLS) with Power B

USERPRINCIPALNAME – show user name and use it in RLS (DAX – Power Pivot, Power BI)

相关文章
相关标签/搜索