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上的安全設定所限制。
參考文件: