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 内でロールとルールを定義できます。 このエディターでは、デフォルトのドロップダウン インターフェイスと DAX インターフェイスの使用を切り替えることができます。 Power BI に発行すると、ロールの定義も発行されます。

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

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

    注意

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

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

    [ロールの管理] が強調されている [モデリング] タブのスクリーンショット。

  3. [ロールの管理] ウィンドウで、[新規] を選択して新規ロールを作成します。

    「ロールの管理」ウィンドウのスクリーンショット。新しいロールの作成ボタンが強調表示されています。

  4. [ロール] でロールの名前を指定し、Enter キーを選択します。

    ロール名の変更を強調表示した「ロールの管理」ウィンドウのスクリーンショット。

    Note

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

  5. [テーブルの選択] で、行レベルのセキュリティ フィルターを適用するテーブルを選びます。

  6. [データのフィルター選択] で、デフォルトのエディターを使ってロールを定義します。 作成された式は、true または false の値を返します。

    行レベルのセキュリティを定義するための [ロールの管理] ウィンドウのデフォルトのエディターのスクリーンショット。

    Note

    デフォルトのエディターを使って、Power BI でサポートされているすべての行レベルのセキュリティ フィルターを定義できるわけではありません。 制限には、たとえば username()userprincipalname() などの動的ルールを含む DAX を使わないと現在は定義できない式などが含まれます。 これらのフィルターを使ってロールを定義するには、DAX エディターを使用するように切り替えてください。

  7. 必要に応じて、[DAX エディターに切り替える] を選択し、DAX エディターを使ってロールの定義に切り替えます。 DAX 式は true または false の値を返します。 (例: [Entity ID] = “Value”)。 DAX エディターには、数式のオートコンプリート (Intellisense) が含まれています。 式ボックスの上にあるチェックマークを選択して式を検証し、式ボックスの上にある [X] ボタンをクリックして変更を元に戻すことができます。

    DAX 式の例が強調されている [ロールの管理] ウィンドウのスクリーンショット。

    注意

    この式の中では username() を使用できます。 Power BI Desktop 内では username() の形式は DOMAIN\username になることにご注意ください。 Power BI サービスと Power BI Report Server 内では、それはユーザーのユーザー プリンシパル名 (UPN) の形式になります。 また、必ずユーザー プリンシパル名 (username@contoso.com) の形式でユーザーを返す userprincipalname() を使用することもできます。 さらに、この式ボックスでは、通常はセミコロン区切り文字を使用するロケール (フランス語やドイツ語など) を使用している場合でも、DAX 関数の引数をコンマで区切ります。

  8. デフォルトのエディターに戻すには、[デフォルトのエディターに切り替え] を選択します。 いずれかのエディター インターフェイスで行ったすべての変更は、可能であればインターフェイスを切り替えても保持されます。 DAX エディターを使ってデフォルトのエディターでは定義できないロールを定義しているときに、デフォルトのエディターに切り替えようとすると、エディターを切り替えると一部の情報が失われる可能性があることを示す警告が表示されます。 この情報を保持するには、[キャンセル] を選択し、DAX エディターのみでこのロールを編集し続けるようにします。

    デフォルトのエディターに切り替えるダイアログのスクリーンショット。

    Note

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

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

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

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

詳細については、「Power BI での DirectQuery を使用する双方向のクロス フィルタリング」と「表形式の BI セマンティック モデルの保護」の技術記事を参照してください。

両方向にセキュリティ フィルターを適用するモデルリレーションシップ設定のスクリーンショット。

モデルのセキュリティの管理

セマンティック モデルのセキュリティを管理するには、Fabric でセマンティック モデルを保存したワークスペースを開き、次の手順を実行します。

  1. Fabric で、セマンティック モデルの [その他のオプション ] メニューを選択します。 セマンティック モデル名をポイントすると、このメニューが表示されます。

    [ナビゲーション] メニューの[その他のオプション] メニューを示すスクリーンショット。

  2. [セキュリティ] を選択します。

    [セキュリティ] が選択されている [その他のオプション] メニューを示すスクリーンショット。

[セキュリティ] を選択すると、移動先のロール レベルのセキュリティ ページで、作成したロールにメンバーを追加できます。 共同作成者 (および上位のワークスペース ロール) には [セキュリティ] が表示され、ユーザーをロールに割り当てることができます。

メンバーの操作

メンバーの追加

Power BI サービスでは、ユーザーまたはセキュリティ グループのメール アドレスまたは名前を入力することにより、ロールにメンバーを追加できます。 Power BI で作成されたグループを追加することはできません。 組織外部のメンバーを追加できます。

次のグループを使用して、行レベル セキュリティを設定できます。

Microsoft 365 グループはサポートされておらず、どのロールにも追加できないことに注意してください。

メンバーの追加方法を示すスクリーンショット。

ロール名または [メンバー] の横のかっこ内の数字は、そのロールに属しているメンバーの数を示します。

役割に属しているメンバーを示すスクリーンショット。

メンバーの削除

メンバーを削除するには、メンバー名の横の [X] を選択します。

メンバーの削除方法を示すスクリーンショット。

Power BI サービス内でのロールの検証

役割をテストすることで、定義した役割が Power BI サービスで正しく動作することを検証することができます。

  1. ロールの横にあるその他のオプション (...) を選択します。
  2. [ロールとしてテスト] を選択してください。

ロールとしてテスト オプションを示すスクリーンショット。

存在する場合は、このセマンティック モデルを使用して Power BI Desktop から発行されたレポートにリダイレクトされます。 ダッシュボードは、[ロールとしてテスト] オプションを使用したテストには使用できません。

ページ ヘッダーには、適用されているロールが表示されます。 [次のユーザーとして表示中] を選択することで、その他のロール、またはロールの組み合わせ、または特定のユーザーをテストすることができます。 ここで、テスト対象の個人またはロールに関連する重要なアクセス許可の詳細を確認できます。 アクセス許可が RLS とどのように連携するかの詳細については、「RLS ユーザー エクスペリエンス」を参照してください。

特定のユーザーの [次のユーザーとして表示中] のスクリーンショット。

ページ ヘッダーで [表示] を選択して、セマンティック モデルに接続されている他のレポートをテストします。 テストできるのは、セマンティック モデルと同じワークスペースにあるレポートのみです。

テストする別のレポートを選択するための [表示] のスクリーンショット。

通常の表示に戻るには、 [行レベルのセキュリティに戻る] を選択します。

注意

[ロールとして表示] 機能は、シングル サインオン (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 を改善するためのアイデアをお寄せください