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() 返回用戶安全主體名稱,格式是:[email protected]

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() 返回用戶安全主體名稱,格式是:[email protected]

案例:用戶通過郵箱登陸,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許可權控制設置簡要說明