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

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

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

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

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

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

  • SQLウェアハウス

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

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

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

マテリアライズドビュー、ストリーミングテーブル、標準ビューのサポート

動的ビュー、行フィルター、列マスクに加えて、データ フィルターでは、 Databricks Runtime 15.3 以前で実行されているシングル ユーザー コンピュートでサポートされていない次のビューとテーブルに対するクエリも有効になります。

  • 標準ビュー

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

  • ストリーミングテーブル

  • マテリアライズドビュー

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

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

  • ユーザーが 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オペレーター ノードを展開すると、次のような質問に対処するメトリクスが表示されます。

  • データのフィルタリングにはどのくらいの時間がかかりましたか? 「total remote execution time」を参照します。

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

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

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

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

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

制限事項

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

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

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

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