Power BI 的資料列層級安全性 (RLS)

使用 Power BI 的數據列層級安全性 (RLS) 可用來限制指定使用者的數據存取。 篩選會限制數據列層級的數據存取,而且您可以在角色內定義篩選。 在 Power BI 服務 中,具有工作區存取權的使用者可以存取該工作區中的語意模型。 RLS 只會限制具有 查看器 許可權的用戶數據存取。 它不適用於 管理員、成員或參與者。

您可以針對使用 Power BI 匯入至 Power BI 的數據模型設定 RLS。 您也可以在使用 DirectQuery 的語意模型上設定 RLS,例如 SQL Server。 針對 Analysis Services 或 Azure Analysis Services 存有連線,您可以在模型中設定數據列層級安全性,而不是在 Power BI 中設定。 安全性選項不會針對即時連線語意模型顯示。

在 Power BI Desktop 中定義角色和規則

您可以在 Power BI Desktop 中定義角色和規則。 當您發佈至 Power BI 時,也會發佈角色定義。

若要定義安全性角色:

  1. 將數據匯入 Power BI Desktop 報表,或設定 DirectQuery 連線。

    注意

    您無法在 Power BI Desktop 中定義 Analysis Services 即時連線的角色。 您必須在 Analysis Services 模型中執行此動作。

  2. 從 [模型] 索引 標籤 中,選取 [ 管理角色]。

    Screenshot of the Modeling tab, highlighting Manage roles.

  3. 從 [ 管理角色] 視窗中,選取 [ 建立]。

    Screenshot of the Manage roles window, highlighting Create.

  4. 在 [角色]下,提供角色的名稱。

    注意

    您無法使用逗號來定義角色,例如 London,ParisRole

  5. 在 [數據表] 下,選取您要套用 DAX (數據分析表示式) 規則的數據表。

  6. 在 [ 數據表篩選 DAX 表達式 ] 方塊中,輸入 DAX 運算式。 此表達式會傳回 true 或 false 的值。 例如: [Entity ID] = “Value”

    Screenshot of the Manage roles window, highlighting an example DAX expression.

    注意

    您可以在此表示式中使用username()。 請注意,username() 在 Power BI Desktop 中具有 DOMAIN\username 的格式。 在 Power BI 服務 和 Power BI 報表伺服器 中,其格式為用戶的用戶主體名稱(UPN)。 或者,您可以使用 userprincipalname(),其一律會以使用者主體名稱的格式傳回使用者: username@contoso.com

  7. 建立DAX表達式之後,請選取表達式方塊上方的複選標記來驗證表達式。

    Screenshot of the Table filter DAX expression window, highlighting the checkmark.

    注意

    在此表達式方塊中,即使您使用的是通常使用分號分隔符的地區設定(例如法文或德文),仍使用逗號分隔 DAX 函式自變數。

  8. 選取 [儲存]。

您無法將使用者指派給 Power BI Desktop 內的角色。 您會在 Power BI 服務 中指派它們。 您可以使用 username()userprincipalname() DAX 函式,並設定適當的關聯性,在 Power BI Desktop 中啟用動態安全性。

根據預設,數據列層級安全性篩選會使用單向篩選,不論關聯性是設定為單向還是雙向。 您可以選取關聯性,並核 取 [雙向安全性篩選] 複選框,以手動啟用具有數據列層級安全性的 雙向交叉篩選。 請注意,如果數據表參與多個雙向關聯性,您只能針對其中一個關聯性選取此選項。 當您也已在伺服器層級實作動態數據列層級安全性時,請選取此選項,其中數據列層級安全性是以使用者名稱或登入標識元為基礎。

如需詳細資訊,請參閱 在Power BI 中使用 DirectQuery 的雙向交叉篩選,以及 保護表格式 BI 語意模型 技術文章。

Screenshot of the apply Security Filter.

使用增強的資料欄位層級安全性編輯器在 Power BI 中定義角色和規則 (預覽)

您可以使用增強的數據列層級安全性編輯器,快速且輕鬆地在Power BI 中定義資料列層級安全性角色和篩選。 透過此編輯器,您可以使用預設下拉式介面和 DAX 介面來切換。 當您發佈至 Power BI 時,也會發佈角色定義。

若要使用增強的數據列層級安全性編輯器來定義安全性角色:

  1. 在 Power BI Desktop 中,移至 [檔案>選項] 和 [設定 > 選項>預覽功能] 來啟用預覽,然後開啟 [增強的數據列層級安全性編輯器]。 或者,您可以在服務中使用這個編輯器,方法是在 Power BI 服務 中編輯您的數據模型。

  2. 將數據匯入 Power BI 語意模型,或設定 DirectQuery 連線。

  3. 從功能區中,選取 [ 管理角色]。

    Screenshot of the Manage roles button in the Desktop ribbon.

  4. 從 [ 管理角色] 視窗中,選取 [ 新增 ] 以建立新的角色。

    Screenshot of creating a new role in the enhanced row-level security editor.

  5. 在 [角色] 底下,提供角色的名稱,然後選取 Enter。

    Screenshot of renaming a role in the enhanced row-level security editor.

  6. 在 [選取數據表] 底下,選取您要套用數據列層級安全性篩選的數據表。

  7. 在 [篩選數據] 底下,使用預設編輯器來定義您的角色。 建立的表達式會傳回 true 或 false 值。

    Screenshot of an example of using the default editor in the enhanced row-level security editor.

    注意

    並非所有在 Power BI 中支援的數據列層級安全性篩選器都可以使用預設編輯器來定義。 限制包括目前只能使用 DAX 定義的表達式,包括動態規則,例如 username() 或 userprincipalname()。 若要使用這些篩選條件來定義角色,請使用 DAX 編輯器。

  8. 選擇性地選取 [切換至 DAX 編輯器 ] 以切換為使用 DAX 編輯器來定義您的角色。 您可以選取 [切換至預設編輯器] 來切換回預設編輯器。 在可能的情況下切換介面時,任何一個編輯器介面中所做的所有變更都會保存。

    Screenshot of an example of using the dax editor in the enhanced row-level security editor.

    使用預設編輯器中無法定義的 DAX 編輯器定義角色時,如果您嘗試切換至預設編輯器,系統會提示您輸入警告,指出切換編輯器可能會導致某些資訊遺失。 若要保留此資訊,請選取 [ 取消 ],並繼續在DAX編輯器中編輯此角色。

    Screenshot of an example error dialog when switching from the DAX to default editor in enhanced row-level security editor.

  9. 選取儲存

驗證 Power BI Desktop 內的角色

建立角色之後,請在Power BI Desktop 中測試角色的結果。

  1. 從 [模型] 索引 標籤 中,選取 [ 檢視身分]。

    Screenshot of the Modeling tab, highlighting View as.

    [ 以角色 身分檢視] 視窗隨即出現,您會看到您已建立的角色。

    Screenshot of the View as roles window with None selected.

  2. 選取您建立的角色。 然後選擇 [ 確定 ] 以套用該角色。

    報表會轉譯與該角色相關的數據。

  3. 您也可以選取 [其他使用者 ],並提供指定的使用者。

    Screenshot of the View as roles window with an example user entered.

    最好提供用戶主體名稱 (UPN),因為這是 Power BI 服務 和 Power BI 報表伺服器 使用的內容。

    在 Power BI Desktop 中,只有在您根據 DAX 運算式使用動態安全性時, 其他使用者 才會顯示不同的結果。 在此情況下,您必須包含使用者名稱和角色。

  4. 選取 [確定]。

    報表會根據 RLS 篩選條件允許使用者看到的內容來轉譯。

    注意

    已啟用 單一登錄 (SSO) 的 DirectQuery 模型無法使用 [檢視為角色 ] 功能。

管理模型的安全性

若要管理語意模型的安全性,請開啟您在 Power BI 服務 中儲存語意模型的工作區,然後執行下列步驟:

  1. 在 Power BI 服務 中,選取語意模型的 [更多選項] 功能表。 當您將滑鼠停留在語意模型名稱上時,不論您是從導覽功能表或工作區頁面選取它時,就會顯示此功能表。

    Screenshot showing the more options menu in the workspace.

    Screenshot showing the more options menu in navigation menu.

  2. 選取安全性

    Screenshot showing the more options menu with Security selected.

安全性會帶您前往 [角色層級安全性] 頁面,您可以在其中將成員新增至您所建立的角色。 參與者(和更高工作區角色)將會看到 安全性 ,並可將使用者指派給角色。

使用成員

新增成員

在 Power BI 服務 中,您可以輸入使用者或安全組的電子郵件地址或名稱,將成員新增至角色。 您無法新增在 Power BI 中建立的群組。 您可以在組織外部新增成員

您可以使用下列群組來設定資料列層級安全性。

不過請注意,不支援 Microsoft 365 群組,且無法新增至任何角色。

Screenshot showing how to add a member.

您也可以依角色名稱旁的括號或 [成員] 旁的括弧,查看有多少成員屬於角色的一部分。

Screenshot showing members in role.

拿掉成員

您可以選取其名稱旁邊的 X 來移除成員。

Screenshot showing how to remove a member.

驗證 Power BI 服務 內的角色

您可以藉由測試角色,來驗證您所定義的角色在 Power BI 服務 中正常運作。

  1. 選取 角色旁邊的 [更多選項 ][...]。
  2. 選取 [ 測試為角色]。

Screenshot of test as role option.

如果報表存在,系統會將您重新導向至從 Power BI Desktop 發行且具有此語意模型的報表。 儀錶板無法使用 [測試為角色] 選項進行測試

在頁首中,會顯示要套用的角色。 選取 [立即檢視身分] 來測試其他角色、角色組合或特定人員。 在這裡,您會看到與所測試的個人或角色相關的重要許可權詳細數據。 如需許可權如何與 RLS 互動的詳細資訊,請參閱 RLS 用戶體驗

Screenshot of Now viewing as dropdown for a specific person.

選取頁首中的 [ 檢視 ],以測試連接到語意模型的其他報表。 您只能測試與語意模型位於相同工作區中的報表。

Screenshot of Viewing to select a different report to test.

若要返回正常檢視,請選取 [回到數據列層級安全性]。

注意

啟用單一登錄 (SSO) 的 DirectQuery 模型無法使用 「以角色身分測試」功能。 此外,並非所有報表的各個層面都可以在測試中驗證為角色功能,包括Q&A視覺效果、快速深入解析視覺效果和 Copilot。

使用 username() 或 userprincipalname() DAX 函式

您可以利用數據集內的DAX函式username()userprincipalname()。 您可以在 Power BI Desktop 的運算式中使用它們。 當您發佈模型時,它會在 Power BI 服務 內使用。

在 Power BI Desktop 中,username() 會以 DOMAIN\User 的格式傳回使用者,而 userprincipalname() 會以 的格式user@contoso.com傳回使用者。

在 Power BI 服務 中,username()userprincipalname() 都會傳回使用者的用戶主體名稱(UPN)。 這看起來與電子郵件地址類似。

在 Power BI 中搭配工作區使用 RLS

如果您將Power BI Desktop報表發佈至 Power BI 服務 中的工作區,RLS 角色會套用至指派給工作區中檢視者角色的成員。 即使檢視 獲得語意模型的建置許可權,RLS 仍適用。 例如,如果具有建置許可權的檢視者使用 [在 Excel 中進行分析],則數據的檢視會受到 RLS 的限制。 指派 管理員成員參與者的工作區成員具有語意模型的編輯許可權,因此 RLS 不適用於它們。 如果您想要將 RLS 套用至工作區中的人員,您只能指派查看器角色。 深入瞭解 工作區中的角色。

考量與限制

您可以在這裡看到雲端模型上資料列層級安全性的目前限制:

  • 如果您先前在 Power BI 服務 中定義角色和規則,則必須在Power BI Desktop 中重新建立它們。
  • 您只能在使用 Power BI Desktop 建立的語意模型上定義 RLS。 如果您想要為使用 Excel 建立的語意模型啟用 RLS,您必須先將檔案轉換成 Power BI Desktop (PBIX) 檔案。 深入了解
  • 服務主體無法新增至 RLS 角色。 因此,RLS 不會套用至使用服務主體作為最終有效身分識別的應用程式。
  • 僅支援 Import 和 DirectQuery 連線。 內部部署模型中會處理 Analysis Services 的即時連線。
  • 啟用單一登錄 (SSO) 的 DirectQuery 模型無法使用 [以角色/檢視為角色] 功能。
  • [測試為角色/檢視] 作為角色功能只會顯示語意模型工作區中的報表。
  • [測試為角色/檢視為角色] 功能不適用於編頁報表。

請記住,如果 Power BI 報表參考已設定 RLS 的數據列,則會顯示與已刪除或不存在欄位相同的訊息。 對這些用戶來說,報表看起來會中斷。

常見問題集

問題:如果我先前已在 Power BI 服務 中建立數據集的角色和規則,該怎麼辦? 如果我什麼都不做,他們仍然工作嗎?
答: 否,視覺效果無法正確轉譯。 您必須在Power BI Desktop 中重新建立角色和規則,然後發佈至 Power BI 服務。

問題: 我可以為 Analysis Services 數據源建立這些角色嗎?
答: 是,如果您將數據匯入 Power BI Desktop。 如果您使用即時連線,則無法在 Power BI 服務 內設定 RLS。 您可以在內部部署的 Analysis Services 模型中定義 RLS。

問題: 我可以使用 RLS 來限制使用者可存取的數據行或量值嗎?
答: 否,如果使用者可以存取特定數據列,他們可以看到該數據列的所有數據行。 若要限制數據行和數據行元數據的存取,請考慮使用 物件層級安全性

問題: RLS 是否讓我隱藏詳細數據,但可讓您存取視覺效果中摘要的數據?
答: 否,您可以保護個別的數據列,但使用者一律可以看到詳細數據或摘要數據。

問題: 我的數據源已定義安全性角色(例如 SQL Server 角色或 SAP BW 角色)。 這些角色與 RLS 之間的關聯性為何?
答: 答案取決於您要匯入數據或使用 DirectQuery。 如果您要將數據匯入 Power BI 數據集,則不會使用資料源中的安全性角色。 在此情況下,您應該定義 RLS,以針對在 Power BI 中連線的使用者強制執行安全性規則。 如果您使用 DirectQuery,則會使用數據源中的安全性角色。 當用戶開啟報表時,Power BI 會將查詢傳送至基礎數據源,以根據使用者的認證將安全性規則套用至數據。

問題: 使用者是否可以屬於一個以上的角色?
答: 用戶可以屬於多個角色,而且角色是加總的。 例如,如果用戶同時屬於「銷售」和「行銷」角色,他們可以看到這兩個角色的數據。

有任何問題嗎? 請嘗試詢問 Power BI 社群 建議? 貢獻想法來改善 Power BI