ABACポリシーでのタイムトラベル
ベータ版
ABACポリシーが設定されたテーブルでのタイムトラベルはベータ版です。この機能を使用するには、 属性ベースのアクセス制御を使用したUCマネージドテーブルでのタイムトラベル プレビューを有効にしてください。標準コンピュートでのクエリーにはDatabricks Runtime 19以降が必要です。Serverless コンピュートもサポートされています。
タイムトラベルを使用すると、特定Timestampまたは Delta Lake トランザクションログのバージョン番号を使用して、履歴テーブルデータを照会できます。
Databricks Runtime 19以降では、条件を満たすテーブルに対するタイムトラベルクエリーで、ABACの行フィルターおよび列マスクポリシーが適用されます。SQLクエリーでは、テーブル識別子において TIMESTAMP AS OF、VERSION AS OF、または @ の構文 (table_name@v1 や table_name@20240101000000000 など) を使用できます。DataFrameクエリーでは、timestampAsOf または versionAsOf オプションを使用できます。
要件
テーブルとコンピュートは、次のすべての要件を満たしている必要があります。
- クエリーは、Databricks Runtime 19 以降を使用する 標準コンピュート、または Serverless コンピュート で実行されます。専用コンピュートでのクエリーはサポートされていません。
- このテーブルは、カタログコミットが有効な Unity Catalog 管理下の Delta テーブル、または管理下の Iceberg テーブルです。
- マネージド Delta テーブルの場合、同じ列マッピングモードを使用して、現在のテーブルバージョンとクエリー対象の過去のバージョンの両方で列マッピングが有効になります。
ABAC ポリシーにおけるタイムトラベルの仕組み
ABACポリシーを適用するタイムトラベルクエリーについて、Databricksは要求されたヒストリカルテーブルバージョンを読み取り、そのスキーマを現在のテーブルスキーマと比較します。Databricksは両方のスキーマに存在する列のみを返すため、ヒストリカルスキーマまたは現在のスキーマのいずれかにのみ存在する列は公開されません。次に、テーブルに現在定義されているABACポリシーを、クエリーを実行するユーザーのヒストリカルデータに適用します。
履歴バージョンに欠落しているか、互換性のない列に現在のポリシーが依存している場合、クエリーは保護されていないデータを返すのではなく、フェイルクローズします。
ベストプラクティス
- 列マッピングを有効に保ち、ユーザーがクエリーを実行する可能性のあるすべてのテーブルバージョンで同じ列マッピングモードを使用してください。
- ポリシーを適用または変更する前に、ポリシーによって参照される各カラムが、ユーザーがクエリーを実行する必要のあるすべての履歴バージョンに互換性のある定義で存在することを確認してください。
- テーブルのスキーマやポリシーを変更した後に、代表的なタイムトラベル クエリーをテストして、期待される列、行フィルター、およびマスクを確認します。
制限事項
テーブルレベルの行フィルターまたは列マスクが設定されているテーブルでのタイムトラベルはサポートされていません。