Power BI での行レベルのセキュリティ (RLS)

Power BI で行レベル セキュリティ (RLS) を使用すると、特定のユーザーのデータ アクセスを制限できます。 フィルターでは行レベルでデータ アクセスが制限され、ロール内でフィルターを定義することができます。 Power BI サービスでは、ワークスペースにアクセスできるユーザーがそのワークスペース内のセマンティック モデルにアクセスすることができます。 RLS では、ビューアーのアクセス許可を持つユーザーのデータ アクセスのみが制限されます。 管理者、メンバー、共同作成者には適用されません。

Power BI で Power BI にインポートされたデータ モデルの RLS を構成できます。 SQL Server などの DirectQuery を使用しているセマンティック モデルに RLS を構成することもできます。 Analysis Services または Azure Analysis Services のライブ接続では、Power BI 内ではなく、モデル内の行レベルのセキュリティを構成します。 このセキュリティ オプションは、ライブ接続セマンティック モデルには表示されません。

Power BI Desktop 内でロールとルールを定義する

Power BI Desktop 内でロールとルールを定義できます。 Power BI に発行すると、ロールの定義も発行されます。

セキュリティ ロールを定義するには:

  1. Power BI Desktop レポートにデータをインポートするか、DirectQuery 接続を構成します。

    注意

    Analysis Services ライブ接続の場合、Power BI Desktop 内でロールを定義することはできません。 Analysis Services モデル内で定義する必要があります。

  2. [モデリング] タブから [ロールの管理] を選択します。

    Screenshot of the Modeling tab, highlighting Manage roles.

  3. [ロールの管理] ウィンドウから [作成] を選択します。

    Screenshot of the Manage roles window, highlighting Create.

  4. [ロール] でロールの名前を指定します。

    Note

    たとえば、London,ParisRole のように、コンマを使ってロールを定義することはできません。

  5. [テーブル] で、DAX (Data Analysis Expression) ルールを適用するテーブルを選びます。

  6. [テーブル フィルターの DAX 式] ボックスに DAX 式を入力します。 この式からは値として true または false が返されます。 (例: [Entity ID] = “Value”)。

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

    Note

    この式の中では username() を使用できます。 Power BI Desktop 内では username() の形式は DOMAIN\username になることにご注意ください。 Power BI サービスと Power BI Report Server 内では、それはユーザーのユーザー プリンシパル名 (UPN) の形式になります。 また、必ずユーザー プリンシパル名 (username@contoso.com) の形式でユーザーを返す userprincipalname() を使用することもできます。

  7. DAX 式を作成した後、式ボックスの上にあるチェックマークを選択し、式を評価します。

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

    Note

    この式ボックスでは、コンマを使用して DAX 関数の引数を区切ります。これは、通常はセミコロンが区切り文字として使用されるロケール (フランス語やドイツ語など) にも当てはまります。

  8. [保存] を選択します。

Power BI Desktop 内でロールにユーザーを割り当てることはできません。 その割り当ては、Power BI サービスで行います。 username() または userprincipalname() DAX 関数を使用し、適切な関係を構成することで、Power BI Desktop 内で動的セキュリティを有効にできます。

既定では、リレーションシップが一方向と双方向のいずれに設定されているかに関係なく、行レベルのセキュリティ フィルターで一方向のフィルターが使用されます。 行レベルのセキュリティで双方向のクロス フィルターを手動で有効にすることができます。その場合は、リレーションシップを選択して、 [両方向にセキュリティ フィルターを適用する] チェック ボックスをオンにします。 テーブルが複数の双方向リレーションシップに含まれる場合、これらのリレーションシップのいずれかに対してのみこのオプションを選択できることに注意してください。 サーバー レベルで、動的な行レベルのセキュリティも実装した場合 (行レベルのセキュリティはユーザー名またはログイン ID に基づく) は、このオプションをオンにします。

詳細については、「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.

    Note

    既定のエディターを使って、Power BI でサポートされているすべての行レベルのセキュリティ フィルターを定義できるわけではありません。 制限には、たとえば username() や userprincipalname() などの動的ルールを含む DAX を使わないと現在は定義できない式などが含まれます。 これらのフィルターを使ってロールを定義するには、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. 作成したロールを選びます。 次に、[OK] を選んでそのロールを適用します。

    レポートでは、そのロールに関連するデータがレンダリングされます。

  3. その他のユーザーを選択し、特定のユーザーを指定することもできます。

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

    Power BI サービスと Power BI Report Server ではユーザー プリンシパル名 (UPN) が使われるので、それを指定するのが最善です。

    Power BI Desktop の [その他のユーザー] には、DAX 式に基づいた動的セキュリティを使用している場合にのみ、異なる結果が表示されます。 この場合は、ユーザー名とロールを含める必要があります。

  4. [OK] を選択します。

    レポートでは、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 内で再作成する必要があります。
  • RLS は、Power BI Desktop を使用して作成されたセマンティック モデルにのみ定義できます。 Excel で作成されたセマンティック モデルに対して RLS を有効にするには、最初にファイルを Power BI Desktop (PBIX) ファイルに変換する必要があります。 詳細情報 を参照してください。
  • サービス プリンシパルを RLS ロールに追加することはできません。 そのため、RLS は、サービス プリンシパルを最終的で有効な ID として使うアプリには適用されません。
  • Import と DirectQuery 接続のみサポートされます。 Analysis Services へのライブ接続は、オンプレミス モデルで処理されます。
  • [ロールとしてテスト] と [ロールとして表示] 機能は、シングル サインオン (SSO) が有効になっている DirectQuery モデルでは機能しません。
  • [ロールとしてテスト] 機能と [ロールとしての表示] 機能は、セマンティック モデル ワークスペースからのレポートのみを表示します。
  • [ロールとしてテスト]/[ロールとして表示] 機能は、改ページ対応レポートでは機能しません。

Power BI レポートで RLS が構成された行を参照する場合、削除されたか存在しないフィールドの場合と同じメッセージが表示されることに注意してください。 このようなユーザーにとっては、レポートが壊れているように見えます。

よく寄せられる質問

質問: 以前に、Power BI サービスでデータセットのロールおよびルールを作成している場合はどうなりますか? 何もしなくてもそれらは動作しますか?
回答: いいえ。視覚エフェクトは正しくレンダリングされません。 Power BI Desktop 内でロールおよびルールを再作成し、Power BI サービスに発行する必要があります。

質問: Analysis Services データ ソースにこれらのロールを作成できますか。
回答: Power BI Desktop にデータをインポートした場合はできます。 ライブ接続を使用している場合、Power BI サービス内で RLS を構成することはできません。 RLS は、オンプレミスの Analysis Services モデルで定義します。

質問: RLS を使って、ユーザーがアクセスできる列またはメジャーを制限できますか。
回答: いいえ。ユーザーは、特定のデータ行にアクセスできる場合は、その行のすべてのデータ列を見ることができます。 列および列のメタデータへのアクセスを制限するには、オブジェクト レベルのセキュリティの使用をご検討ください。

質問: RLS を使って、詳細なデータは表示されないようにしながら、ビジュアルの集計データにはアクセスできるようにすることができますか。
回答: いいえ。個々のデータ行は保護されますが、ユーザーは常に詳細データまたは集計データを見ることができます。

質問: データ ソースにセキュリティ ロールが既に定義されています (SQL Server のロールや SAP BW のロールなど)。 これらのロールと RLS の関係はどのようなものですか?
回答: 答えは、データをインポートしているか、DirectQuery を使用しているかによって変わります。 Power BI データセットにデータをインポートしている場合、データ ソースのセキュリティ ロールは使用されません。 この場合、Power BI でつながるユーザーにセキュリティ規則を適用するには、RLS を定義する必要があります。 DirectQuery を使用している場合、データ ソースのセキュリティ ロールが使用されます。 ユーザーがレポートを開くと、Power BI から基礎データ ソースにクエリが送信され、ユーザーの資格情報に基づいてデータにセキュリティ規則が適用されます。

質問: ユーザーは複数のロールに属することができますか?
回答: ユーザーは複数のロールに属することができ、ロールは追加式です。 たとえば、ユーザーが "Sales" ロールと "Marketing" の両方のロールに属している場合、これらの両方のロールのデータを表示できます。

わからないことがある場合は、 Power BI コミュニティで質問してみてください。ご提案の場合は、 Power BI を改善するためのアイデアをお寄せください