行フィルターと列マスク
このページでは、行フィルターと列マスクを使用してテーブル内の機密データをフィルター処理するためのガイダンスを提供します。
行フィルターとは何ですか?
行フィルターを使用すると、カスタム ロジックに基づいて、ユーザーがテーブル内でアクセスできる行を制御できます。クエリ時に、行フィルターは条件を評価し、それを満たす行のみを返します。これは、行レベルのセキュリティを実装するために一般的に使用されます (たとえば、特定の地域、部門、またはアカウントのレコードにユーザーを制限するなど)。
行フィルターは 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)」を参照してください。
-
テーブルごとの手動割り当て : 個々のテーブルと列に関数を直接割り当てることで、フィルターとマスクを適用します。このメソッドでは、マッピング テーブルまたはその他のカスタム ロジックを使用できます。きめ細かいテーブル固有の制御が可能ですが、スケーリングと保守が困難になります。詳細については 情報、 行フィルターと列マスクを手動で適用するを参照してください。