PowerBI開發 第十八篇:行級安全(RLS)

悅光陰發表於2021-04-30

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

Power BI 中的RLS許可權控制設定簡要說明

相關文章