メインコンテンツまでスキップ

行フィルターと列マスク

このページでは、行フィルターと列マスクを使用してテーブル内の機密データをフィルター処理するためのガイダンスを提供します。

行フィルターとは何ですか?

行フィルターを使用すると、カスタム ロジックに基づいて、ユーザーがテーブル内でアクセスできる行を制御できます。クエリ時に、行フィルターは条件を評価し、それを満たす行のみを返します。これは、行レベルのセキュリティを実装するために一般的に使用されます (たとえば、特定の地域、部門、またはアカウントのレコードにユーザーを制限するなど)。

行フィルターは SQL ユーザー定義関数 (UDF) として定義され、SQL UDF にラップされた場合は Python または Scala ロジックを組み込むこともできます。行フィルターは、テーブルごとに適用することも、管理タグを使用して ABAC ポリシーを通じて一元的に適用することもできます。

列マスクとは何ですか?

列マスクは、ユーザーが誰であるかに応じて、特定の列に表示される値を制御します。クエリ時に、マスクは列への各参照をマスキング関数の結果に置き換えます。これにより、SSN や電子メールなどの機密データを、ユーザーの ID や役割に基づいて編集または変換できます。

各列には 1 つのマスクを含めることができます。マスクは SQL UDF として定義され、オプションで Python または Scala ロジックをラップでき、マスクされる列と同じ型の値を返す必要があります。列マスクは、たとえば、複数の属性に基づいて動作を変えるために、他の列を入力として受け取ることもできます。

行フィルターと同様に、列マスクはテーブルごとに適用することも、ABAC ポリシーを使用して一元的に管理することもできます。これらはクエリ時に動作し、標準の SQL、ノートブック、ダッシュボードとシームレスに統合されます。

動的ビューとフィルターとマスクのどちらを使用する必要があるか?

動的ビュー、行フィルター、列マスクはすべて、クエリ時にフィルター処理または変換ロジックを適用できますが、管理、スコープ、およびユーザーへの公開方法が異なります。

機能

適用対象

管理

命名の影響

最適な用途...

動的ビュー

ビュー

SQL ロジック

新しいオブジェクト名を作成します。

フィルター処理されたデータの共有または複数のテーブルにまたがる

行フィルター

テーブル

ABAC またはマッピング テーブル

テーブル名は変更されません

ユーザー タグまたはデータ タグに関連付けられた行レベルのアクセス制御

列マスク

テーブル/列

ABAC またはマッピング テーブル

テーブル名は変更されません

ID に基づく機密列データの編集

  • 的ビューは 、1 つ以上のソース テーブルにまたがる読み取り専用レイヤーが必要な場合、特にデータ共有や複数の入力にロジックを適用する場合に使用します。
  • 行フィルターと列マスク は、テーブル名を変更したり、新しいオブジェクトを導入したりせずに、ロジックをテーブルに直接適用する場合に使用します。これらは、ABAC ポリシー (推奨) を使用して管理することも、テーブルで手動で管理することもできます。

完全な比較については、「 アクセス制御方法の比較」を参照してください。

フィルターとマスクの適用方法

行フィルターと列マスクは、主に次の 2 つの方法で実装できます。

  • ABAC ポリシーの使用 (ベータ版): 管理されたタグと再利用可能なポリシーを使用して、フィルターとマスクを一元的に適用します。このアプローチは、カタログとスキーマ間で拡張され、テーブルごとの構成の必要性を減らします。ABAC ポリシーは、上位レベルの管理者が定義でき、テーブル所有者が上書きできないため、手動のテーブルレベルポリシーよりも安全であり、一元的なアクセス制御を適用するのに役立ちます。また、ABAC ポリシーのフィルタリングおよびマスキング ロジックは、テーブル固有の UDF よりも効率的に評価されるため、多くの場合、パフォーマンスが向上します。Databricks では、ほとんどのユース ケースで ABAC を使用することをお勧めします。ABAC を使用してフィルターとマスクを適用するには、「 Unity Catalog 属性ベースのアクセス制御 (ABAC)」を参照してください。

  • テーブルごとの手動割り当て : 個々のテーブルと列に関数を直接割り当てることで、フィルターとマスクを適用します。このメソッドでは、マッピング テーブルまたはその他のカスタム ロジックを使用できます。きめ細かいテーブル固有の制御が可能ですが、スケーリングと保守が困難になります。詳細については 情報、 行フィルターと列マスクを手動で適用するを参照してください。