行レベルのセキュリティに使用するデータ ポリシーの作成

データ ポリシーを使用すると、仮想接続内の 1 つまたは複数のテーブルに行レベルのセキュリティを適用できます。データ ポリシーは、データをフィルターリングし、ユーザーに表示されるべきデータのみが表示されるようにします。データ ポリシーは、ライブ接続と抽出接続の両方に適用されます。

データ ポリシーについて

データ ポリシーには、3 つの主要な要素があります。

仮想接続エディターにおけるデータ ポリシーの 3 つの要素の例

  1. ポリシー テーブルと呼ばれる、適用対象のテーブル。これらはフィルターされるテーブルです。
  2. マッピングされた列。テーブル間の関係 (たとえば、資格テーブルとファクト テーブル間の関係)、およびテーブル列とポリシー列間の関係を定義するものです。ポリシー列は、データのフィルターに使用される列です。
  3. ポリシー条件。クエリの実行時にすべての行に対して評価される式または計算です。ポリシー条件が TRUE のとき、その行はクエリに表示されます。

データ ポリシーを作成するときは、データのフィルターリングに使用できる列が必要です。この列はポリシー列と呼ばれます。データは、通常 USERNAME() や FULLNAME() などのユーザー関数を使用して、ポリシー条件でフィルターリングします。

ポリシー テーブルにフィルターリング可能な列が含まれている場合は、その列をポリシー列として使用します。

ポリシー テーブルにそのような列が含まれていない場合は、データのフィルターリングに使用できる列を持つ資格テーブルを使用します。資格テーブルには、ポリシー テーブルのフィルターリングに使用できるポリシー列と、ポリシー テーブルの列に関連付ける (マップする) ことができる別の列の両方が含まれます (上のデータ ポリシーの例の画像を参照)。

ポリシー テーブルのポリシー列でフィルターリングする

データをフィルターリングする最も一般的な方法は、フィルターリングするデータを含むテーブルの列を使用することです。その列をポリシー列として使用してから、適切なテーブル列をポリシー列にマップします。

ポリシー列を使用してデータをフィルターリングするには、まず、左側のペインからポリシーにテーブルを追加します。テーブルを追加するには、次のいずれかの操作を行います。

  • テーブル名をダブルクリックします。
  • テーブル名の近くにあるドロップダウン矢印をクリックして、[Manage table with policy (ポリシーを使用してテーブルを管理)] を選択します。
  • または、テーブルを右にドラッグして、[ポリシー テーブルとして追加] にドロップします。

ポリシーにテーブルが追加されると、シールド アイコン データ ポリシー アイコン が左側のペインのテーブル名の右側に表示され、ポリシー テーブルであることが示されます。

次に、列をマッピングして、テーブルの列名とポリシー列名の間にリレーションシップを作成します。データ ポリシー条件のポリシー列名を使用して、ユーザーがデータにアクセスできる権限を行レベルで制御します。

  1. [+マッピングする列を追加] をクリックして、データのフィルター処理に使用する 1 つまたは複数の列を追加します。
  2. ポリシー列に名前を付けます。この名前はポリシー条件で使用します。
  3. ポリシーを適用するテーブルごとに、ドロップダウン メニューを使用して、ポリシー列にマッピングするテーブル列を選択します。
  4. ポリシー条件で使用するポリシー列の数だけこのプロセスを繰り返します。

ヒント: [+マッピングする列を追加] ボタンを使用する代わりに、ポリシー条件領域に計算の入力を開始し、オートコンプリートを使用して列名を選択すると、手順 1 でポリシー列の情報が入力されます。

ポリシー テーブルのポリシー列を使用した例

ポリシー テーブルのポリシー列を使用してデータをフィルターリングするデータ ポリシーの図

  1. "営業" テーブルには [セールスパーソン] 列があり、"地域" テーブルには [営業担当] 列があります。セールスパーソンと営業担当のデータは、サイト上の Tableau ユーザーのフルネームと一致します。
  2. "セールスパーソン" で "営業" と "地域" のデータをフィルターリングしたいので、ポリシー列に "セールスパーソン" という名前を付けてから、"営業" の "セールスパーソン" 列と "地域" の "営業担当" 列を "セールスパーソン" ポリシー列にマッピングします。
  3. 次に、両方のテーブルをフィルターリングするためのポリシー条件を記述します。[セールスパーソン] ポリシー列と FULLNAME() ユーザー関数を使用して、各ユーザーが自分のデータのみを表示できるようにします。

資格テーブルのポリシー列でフィルターリングする

資格テーブルは、ポリシー テーブルにフィルターリングできる列が含まれていない場合に使用します。資格テーブルを使用すると、データ テーブルの列を資格テーブルの列にマッピングできます。次の点に注意してください。

  • 資格テーブルは、仮想接続のテーブルとして必ず含めてください。接続またはデータベースのテーブルを、他の多くのデータベースのテーブルを保護する中央の資格テーブルとして使用できます。場合によっては、保護しているテーブルと同じデータベースにある資格テーブルにより従業員データが公開される可能性があるため、その資格テーブルが潜在的なセキュリティ リスクになる可能性があります。また、資格テーブルを別のデータベースに配置すると、たとえば、データベースへのアクセス権の付与など、パーミッションの制御が容易になります。
  • 仮想接続ユーザーに資格テーブルを表示させたくない場合は、[テーブル] タブの [表示] 列の設定を切り替えて非表示にすることができます。非表示にした資格テーブルは、引き続きポリシー フィルタリングに使用できますが、Viz やワークブックのデータ ソースでは使用できません。

: 資格テーブルでは、フロー出力 (.hyper ファイル) への直接接続はサポートされていません。フロー出力は、データベースに直接書き込む必要があります。

資格テーブルを使用してデータをフィルターリングするには、次の操作を行います。

  1. まず、データ ポリシーを適用したいデータ テーブルを追加します。次のいずれかを実行します。
    • テーブル名をダブルクリックします。
    • テーブル名の近くにあるドロップダウン矢印をクリックして、[Manage table with policy (ポリシーを使用してテーブルを管理)] を選択します。
    • または、テーブルを右にドラッグして、[ポリシー テーブルとして追加] にドロップします。
  2. ポリシーにテーブルが追加されると、シールド アイコン データ ポリシー アイコン が左側のペインのテーブル名の右側に表示され、ポリシー テーブルであることが示されます。
  3. 資格テーブルを選択して、次のいずれかを選択します。
    • ドロップダウン矢印をクリックして、[Use as entitlement table (資格テーブルとして使用)] を選択します。
    • または、テーブルを右にドラッグして、[資格テーブルとして追加] にドロップします。
  4. ポリシーを適用するテーブルごとにドロップダウン メニューをクリックして列を選択し、ポリシー テーブルを資格テーブルにマッピングします。

資格テーブルのポリシー列を使用した例

資格テーブルのポリシー列を使用してデータをフィルターリングするデータ ポリシーの図

  1. フィルターリングするデータには EMP_ID 列がありますが、従業員名の列はありません。ただし、EMP_ID と 従業員の FULL NAME の両方の列を含む 2 番目のテーブルがあります。また、従業員の FULL NAME 列の値は、サイトの Tableau ユーザーのフルネームと一致します。
  2. 従業員テーブルを資格テーブルとしてポリシーに追加してから、ポリシー テーブルの列名 EMP_ID を各テーブルの資格の列名 EMP_ID にマッピングできます。
  3. 次に、ポリシー条件で FULLNAME() 関数を使用して、Tableau Server ユーザーのフルネームを資格テーブルの [FULL NAME] 列 (ポリシー列) と照合し、各ユーザーが自分のデータのみを表示できるようにします。

ポリシー条件を記述する

データ ポリシーを作成する最後のステップは、ポリシー条件を作成することです。これは計算または式であり、行レベルのアクセス権限を定義するために使用します。ポリシー条件は、ユーザー機能を通じてユーザーまたはグループへのアクセスを制限するためによく使用されます。

ポリシー条件は、

  • データ ポリシーで必要です。
  • true または false に評価できる必要があります。
  • ポリシー条件が true の場合に行を表示します。

ポリシー条件の例

[地域] 列の値が "北部" である行のみを表示します。

[Region] = "North"

サインインしたユーザーが、ユーザーの名前が EmployeeName の値と一致する行を表示できるようにします。

FULLNAME() = [EmployeeName]

[マネージャー] グループのメンバーがすべての行を表示できるようにしますが、ユーザーはユーザー名が [employee_name] 列の値と一致する行のみを表示できます。

ISMEMBEROF('Managers') OR USERNAME() = [employee_name]

注: ポリシー タブを閉じても、作業内容は破棄されません。

ポリシー条件でサポートしている Tableau 関数

ポリシー条件は、一部分の Tableau 関数をサポートします。

  • 論理 (Null 関連を除く)
  • 文字列
  • ユーザー
  • 日付
  • 数字: MIN、MID、MAX

サポートしている機能を具体的に確認するには、仮想接続エディターの [データ ポリシー] タブで、右側にある [参照] パネルを参照してください。

実行可能なユーザー

データ ポリシーを作成するには、次のことが必要です。

  • 仮想接続が接続する先のデータベースへの認証資格情報を持っている。
  • サーバー管理者、サイト管理者、または Creator である。

次のステップ

データ ポリシーを作成したら、次のステップは、期待どおりに機能することを確認することです。「[ユーザーとしてプレビュー] を使用して、行レベルのセキュリティをテストする」を参照してください。または、仮想接続とデータ ポリシーを他のユーザーと共有する準備ができている場合は、「仮想接続のパブリッシュとパーミッションの設定」を参照してください。

リソース

計算の詳細については、Tableau Desktop および Web オーサリング ヘルプの「Tableau での計算を理解する(新しいウィンドウでリンクが開く)」を参照してください。

ユーザー関数の詳細については、Tableau Desktop および Web 作成ヘルプの「ユーザー関数(新しいウィンドウでリンクが開く)」を参照してください。

Tableau のその他の行レベルのセキュリティ オプションについては、Tableau Server ヘルプの「Tableau の行レベルのセキュリティ オプションの概要(新しいウィンドウでリンクが開く)」を参照してください。

フィードバックをありがとうございます。フィードバックは正常に送信されました。ありがとうございます!