このトピックでは、データ認可における行フィルターと列マスキングについて、その設定、制限、およびルールが競合した場合の処理を含めて説明します。
制限事項
行フィルターの制限
エンジンバージョン:DLF の行フィルターに対応したコンピューティングエンジンのみがサポートされます。現在、Serverless Spark のみがサポートされており、以下のいずれかのバージョンを使用する必要があります。
esr-5.2.0 (Spark 4.0.1, Scala 2.13) 以降
esr-4.8.0 (Spark 3.5.2, Scala 2.12) 以降
esr-3.7.0 (Spark 3.4.4, Scala 2.12) 以降
単一ルールの制限:同一のテーブルに対して、ユーザーは複合式を 1 つしか設定できません。
書き込み権限の競合:同一のユーザーとテーブルに対して、行フィルターと書き込み権限 (
ALLまたはUPDATE) を同時に設定することはできません。スキーマ変更の影響:列の名前を変更または削除した場合、元のフィルター式は無効になるため、再設定する必要があります。
複数ポリシーのマージ:ロールベースとユーザーベースのフィルターが同時に設定されている場合、システムは AND 論理演算によってそれらをマージします。
列マスキングの制限
エンジンバージョン:列マスキングルールは Data Lake Formation (DLF) コンソールで設定します。データを照会すると、ルールはコンピューティングエンジンにプッシュダウンされて実行されます。現在、Serverless Spark のみがサポートされており、以下のいずれかのバージョンを使用する必要があります。
書き込み権限の競合:同一のユーザーとテーブルに対して、列マスキングルールと書き込み権限 (
ALLまたはUPDATE) を同時に付与することはできません。スキーマ変更の制限:マスクされた列またはそのネストされたフィールドの名前変更、削除、または型変更はできません。これらの変更を行う前に、列のマスキングルールを取り消してください。
行フィルター
行フィルター式は、クエリ結果のデータ範囲を制限します。これらには、単純式と複合式の 2 種類があります。
単純式
単純式は、単一の列に対する基本的な比較ロジックを定義します。
構文:
<列名> <比較演算子> <値>
パラメーター:
列名:フィルター対象の列。サポートされているデータ型:
ブール値:BOOLEAN
文字列:CHAR、VARCHAR
数値:DECIMAL、TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
日時:TIME、TIMESTAMP
比較演算子:比較方法。サポートされている演算子については、下記の比較表をご参照ください。
値:比較用の定数。型は列のデータ型と一致する必要があります。
複合式
複合式は、複数の単純式を論理演算子で組み合わせて、より複雑なフィルタリングを行います。
構文:
(単純式) <AND/OR> (単純式)
複合式はネストをサポートしており、論理演算子 AND または OR を使ってさらに組み合わせることができます。
演算子の比較表
次の表に、サポートされている演算子と、Apache Paimon における対応するプレディケートの実装を示します。
演算子 | 説明 | Paimon Predicate | 例 |
AND | 論理積 (AND) | PredicateBuilder.and | year > 2010 AND country <> 'US' |
OR | 論理和 (OR) | PredicateBuilder.or | (year > 2010) OR (month < 8) |
IS NULL | NULL値である | PredicateBuilder.isNull | country IS NULL |
IS NOT NULL | NULL値でない | PredicateBuilder.isNotNull | country IS NOT NULL |
IN | いずれかの値と等しい | PredicateBuilder.in | id IN (1, 2, 3) |
NOT IN | いずれの値とも等しくない | PredicateBuilder.notIn | id NOT IN (1, 2, 3) |
= | 等しい | PredicateBuilder.equal | year = 2010 |
<> | 等しくない | PredicateBuilder.notEqual | year <> 2010 |
< | より小さい | PredicateBuilder.lessThan | year < 2010 |
<= | 以下 | PredicateBuilder.lessOrEqual | year <= 2010 |
> | より大きい | PredicateBuilder.greaterThan | year > 2010 |
>= | 以上 | PredicateBuilder.greaterOrEqual | year >= 2010 |
BETWEEN | 範囲内 | PredicateBuilder.between | year BETWEEN 2010 AND 2025 |
列マスキング
列マスキングを使用すると、指定したユーザーまたはロールがテーブルを照会したときに、ソースデータの代わりにマスクされた値が表示されます。たとえば、電話番号の列に対して NULL 値を返したり、ID 番号の列を固定テキストに置き換えたりできます。
列マスキングの設定
ナビゲーションペインで Catalogs を選択し、対象のカタログ、データベース、テーブルを選択します。Permissions タブをクリックし、Grant Permissions をクリックします。
Principal で、RAM ユーザー / RAM ロールまたは DLF ロールを選択します。次に、Select DLF User でプリンシパルを選択します。複数のユーザーに同じマスキングルールを付与するには、DLF ロールの使用を推奨します。
Table で、[Select] を選択します。列マスキングルールを有効にするには、この権限を選択する必要があります。
[Enable Column Masking Rules] を選択し、マスクする各列のマスキング方法を選択します。
マスキング方法
効果
サポートされる列の型
NULL に設定
列全体に対して NULL 値を返します。
すべての型
固定テキスト置換
列全体を指定された固定文字列に置き換えます。
文字列型の列のみ。置換テキストは最大 1,024 バイトまでです。
OK をクリックして保存します。保存されたルールは、Permissions タブの [Column Masking Rules] セクションで表示または取り消しができます。
注意事項
ルールを更新する際は、そのプリンシパルとテーブルで引き続きマスキングするすべての列を含める必要があります。更新時に省略された列は、マスキングが解除されます。
同じ列に対して、複数のプリンシパルにルールを設定できます。「NULL に設定」は、どの方法とも共存できます。その他のマスキング方法とその設定は、同一である必要があります。