シングルユーザーコンピュートに対するきめ細かなアクセス制御

プレビュー

この機能はパブリックプレビュー段階です。

この記事では、シングル ユーザー コンピュート ( シングル ユーザー アクセス モードで構成された汎用またはジョブ コンピュート) で実行されるクエリに対してきめ細かなアクセス制御を可能にするデータ フィルタリング機能について説明します。 「アクセスモード」を参照してください。

このデータのフィルタリングは、サーバレス コンピュートを使用してバックグラウンドで実行されます。

シングルユーザーコンピュートの一部のクエリでデータフィルタリングが必要なのはなぜですか?

Unity Catalog では、次の機能を使用して、列レベルと行レベルで表形式のデータへのアクセスを制御できます (きめ細かいアクセス制御とも呼ばれます)。

ユーザーが、参照先のテーブルからデータを除外するビューや、フィルターとマスクを適用するテーブルをクエリする場合、次のコンピュート リソースを制限なく使用できます。

  • SQLウェアハウス

  • 共有コンピューティング

ただし、シングル ユーザー コンピュートを使用してこのようなクエリを実行する場合、コンピュートとワークスペースは特定の要件を満たす必要があります。

シングル ユーザー コンピュート リソースとワークスペースがこれらの要件を満たしている場合、きめ細かなアクセス制御を使用するビューまたはテーブルに対してクエリを実行するたびに、データ フィルタリングが自動的に実行されます。

注:

動的ビュー、行フィルタ、列マスクに加えて、サーバレス コンピュートのデータ フィルタリングにより、きめ細かいアクセス制御を提供するために使用される標準ビューでのクエリも可能になります。

Databricks Runtime 15.3 以前を実行しているシングル ユーザー コンピュートでは、ビューに対してクエリを実行するユーザーは、ビューによって参照されるテーブルとビューに対するSELECTを持っている必要があるため、ビューを使用してきめ細かなアクセス制御を提供することはできません。データ フィルタリングが可能な Databricks Runtime 15.4 では、ビューに対してクエリを実行するユーザーは、参照されているテーブルとビューにアクセスする必要はありません。

データフィルタリングはシングルユーザーコンピュートでどのように機能しますか?

クエリが次のデータベース・オブジェクトにアクセスするたびに、single user コンピュート リソースはクエリをサーバレス コンピュートに渡してデータ・フィルタリングを実行します。

  • ユーザーが SELECT 権限を持っていないテーブル上に構築されたビュー

  • ダイナミック ビュー

  • 行フィルターまたは列マスクが定義されたテーブル

  • マテリアライズドビューとストリーミングテーブル

次の図では、ユーザーが table_1view_2、および table_w_rlsSELECTがあり、行フィルターが適用されています。ユーザーは、 view_2によって参照される table_2SELECTを持っていません。

データ フィルタリングのしくみを示す図

table_1 に対するクエリは、フィルター処理が不要なため、単一ユーザーのコンピュート リソースによって完全に処理されます。view_2table_w_rls のクエリでは、ユーザーがアクセスできるデータを返すためにデータ フィルタリングが必要です。これらのクエリは、サーバレス コンピュートのデータ フィルタリング機能によって処理されます。

どのような費用がかかりますか?

顧客は、データ フィルタリング操作を実行するために使用されるサーバーレス コンピュート リソースに対して課金されます。 価格情報については、 「プラットフォーム ティアとアドオン」を参照してください。

システム請求使用量テーブルをクエリして、請求された金額を確認できます。 たとえば、次のクエリはコンピュート コストをユーザーごとに分類します。

SELECT usage_date,
sku_name,
 identity_metadata.run_as,
SUM(usage_quantity) AS `DBUs consumed by FGAC`
FROM system.billing.usage
WHERE usage_date BETWEEN '2024-08-01' AND '2024-09-01'
 AND billing_origin_product = 'FINE_GRAINED_ACCESS_CONTROL'
GROUP BY 1, 2, 3 ORDER BY 1;

データフィルタリングが行われているときのクエリパフォーマンスの表示

シングル ユーザー コンピュートの Spark UI には、クエリのパフォーマンスを理解するために使用できるメトリクスが表示されます。 コンピュート リソースに対して実行するクエリごとに、 SQL/Dataframe タブにクエリ グラフ表現が表示されます。 クエリがデータ フィルタリングに関与していた場合、UI ではグラフの下部に RemoteSparkConnectScan 演算子ノードが表示されます。 このノードには、クエリのパフォーマンスを調査するために使用できるメトリクスが表示されます。 「Apache Spark UI でコンピュート情報を表示する」を参照してください。

RemoteSparkConnectScan ノードを示す SparkUI

RemoteSparkConnectScanオペレーター ノードを展開すると、次のような質問に対処するメトリクスが表示されます。

  • データのフィルタリングにはどのくらいの時間がかかりましたか? 「合計リモート実行時間」を表示します。

  • データフィルタリング後にはいくつの行が残っていましたか? 「行出力」を表示します。

  • データ フィルタリング後に返されたデータの量 (バイト単位) はどれくらいですか? 「行の出力サイズ」を表示します。

  • パーティションプルーニングされ、ストレージから読み取る必要がなかったデータファイルはいくつありますか? 「整理されたファイル」と「整理されたファイルのサイズ」を表示します。

  • プルーニングできず、ストレージから読み取らなければならなかったデータ・ファイルはいくつありますか。 「読み取ったファイル」と「読み取ったファイルのサイズ」を表示します。

  • 読み取る必要があったファイルのうち、キャッシュにすでにいくつありましたか? 「キャッシュ・ヒット・サイズ」および「キャッシュ・ミス・サイズ」を表示します。

制限事項

パブリック プレビュー期間中は、次の制限が適用されます。

  • 行フィルターまたは列マスクが適用されているテーブルに対する書き込みまたは更新テーブル操作はサポートされません。

    具体的には、 INSERT, DELETEUPDATEREFRESH TABLEMERGEなどの DML 操作はサポートされていません。 これらのテーブルからのみ (SELECT) を読み取ることができます。

  • データ フィルタリングが呼び出されるとき、自己結合は安全によってブロックされますが、これらのコマンドを実行しているコンピュートでspark.databricks.remoteFiltering.blockSelfJoinsを false に設定することで、自己結合を許可できます。

    シングル・ユーザー・コンピュート・リソースで自己結合を有効にする前に、データ・フィルタリング機能によって処理される自己結合クエリが、同じリモート・テーブルの異なるスナップショットを返す可能性があることに注意してください。