PowerBI開發 第十五篇:Power BI的行級安全


Power BI支持行級安全(Row-Level Security,RLS)的權限控制,用於限制用戶對Dashboard、報表和DataSet的訪問。用戶瀏覽的報表是相同的,但是看到的數據卻是不同的。

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()函數來創建過濾規則。

一,實現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進行配置。

二,創建用戶權限表和關系

實現RLS的關鍵一步是配置用戶權限表,用戶權限表用於指定用戶有權限訪問的數據,而關系是RLS能夠起作用的基礎,通過關系的交叉過濾功能實現用戶訪問數據的行級控制。

舉個例子,有如下用戶權限表:

在本例中,我們在規則中使用userprincipalname()函數,UserName列是用戶的郵件地址,Product列是用戶可以訪問的產品類型,一個User可以訪問多個Product。該表和DimProductCategory創建關系時,設置為“many to 1”的雙向關系,通過UserName來過濾用戶可以訪問的Product。

三,創建角色和規則

有了用戶權限配置表之后,接下來就是創建角色和規則,角色是用戶的集合,角色中的所有用戶遵守相同的規則;規則是定義用戶是否有訪問數據的權限。

在Modeling 選項卡中,選擇“Manager Roles”:

點擊“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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM