データ共有の監査と監視
この記事では、データ プロバイダーと受信者が監査ログを使用して Delta Sharing イベントを監視する方法について説明します。 プロバイダー監査ログには、プロバイダーが実行したアクションと、プロバイダーの共有データに対して受信者が実行したアクションが記録されます。 受信者監査ログには、共有へのアクセスとプロバイダー オブジェクトの管理に関連するイベントが記録されます。
Delta Sharing 監査ログ イベントの一覧を表示するには、「 Delta Sharing イベント」を参照してください。
必要条件
監査ログにアクセスするには、アカウント管理者が Databricks アカウントの監査ログシステムテーブルを有効にする必要があります。 システムテーブルの有効化を参照してください。監査ログシステムテーブルの情報については、 監査ログシステムテーブルリファレンスを参照してください。
アカウント管理者またはメタストア管理者でない場合、監査ログを読み取るには、 system.access.audit
へのアクセス権を付与する必要があります。
監査ログで Delta Sharing イベントを表示する
アカウントでシステムテーブルが有効になっている場合、監査ログは system.access.audit
に保存されます。 また、アカウントに 監査ログ配信が設定されている場合は、ログが配信されるバケットとパスを知る必要があります。
ログに記録されたイベント
Delta Sharing 監査ログ イベントの一覧を表示するには、「 Delta Sharing イベント」を参照してください。
受信者のクエリ結果の詳細を表示する
Delta Sharing では、テーブル、ビュー、マテリアライズドビュー、ストリーミング可能、ボリュームなどの資産タイプの共有がサポートされています。 Delta Sharing は、署名済み URL またはスコープダウンされた STS トークンから基になるデータへの一時的な読み取りアクセスを提供します。 次の表は、共有タイプがログに記録された監査ログイベントにどのように対応するかを示しています。
シナリオ | 監査ログイベント |
---|---|
開いている受信者と共有されているテーブルと、Databricks の受信者と共有されている履歴のないテーブル |
|
Databricks の受信者と共有される履歴を含むテーブル |
|
ボリューム共有 (STS トークンベースのアクセス) |
|
署名済み URL 共有の詳細を表示する
プロバイダー ログでは、データ受信者のクエリが署名済み URL ベースの共有の応答を取得した後に、 deltaSharingQueriedTableChanges
イベントと deltaSharingQueriedTable
イベントが記録されます。 プロバイダーは、これらのログの response.result
フィールドを表示して、受信者と共有された内容の詳細を確認できます。 このフィールドには、次の値を含めることができます。 このリストは網羅的なものではありません。
"checkpointBytes": "0",
"earlyTermination": "false",
"maxRemoveFiles": "0",
"path": "file: example/s3/path/golden/snapshot-data0/_delta_log",
"deltaSharingPartitionFilteringAccessed": "false",
"deltaSharingRecipientId": "<redacted>",
"deltaSharingRecipientIdHash": "<recipient-hash-id>",
"jsonLogFileNum": "1",
"scannedJsonLogActionNum": "5",
"numRecords": "3",
"deltaSharingRecipientMetastoreId": "<redacted>",
"userAgent": "Delta-Sharing-Unity-Catalog-Databricks-Auth/1.0 Linux/4.15.0-2068-azure-fips OpenJDK_64-Bit_Server_VM/11.0.7+10-jvmci-20.1-b02 java/11.0.7 scala/2.12.15 java_vendor/GraalVM_Community",
"jsonLogFileBytes": "2846",
"checkpointFileNum": "0",
"metastoreId": "<redacted>",
"limitHint": "Some(1)",
"tableName": "cookie_ingredients",
"tableId": "1234567c-6d8b-45fd-9565-32e9fc23f8f3",
"activeAddFiles": "2", // number of AddFiles returned in the query
"numAddFiles": "2", // number of AddFiles returned in the query
"numAddCDCFiles": "2", // number of AddFiles returned in the CDF query
"numRemoveFiles": "2", // number of RemoveFiles returned in the query
"numSeenAddFiles": "3",
"scannedAddFileSize": "1300", // file size in bytes for the AddFile returned in the query
"scannedAddCDCFileSize": "1300", // file size in bytes for the AddCDCFile returned in the CDF query
"scannedRemoveFileSize": "1300", // file size in bytes for the RemoveFile returned in the query
"scannedCheckpointActionNum": "0",
"tableVersion": "0"
STS-トークン共有の詳細を表示する
プロバイダー ログでは、データ受信者のクエリが STS トークンベースの共有の応答を取得した後に、 generateTemporaryTableCredentials
イベントと generateTemporaryVolumeCredentials
イベントが記録されます。 プロバイダーは、これらのログの request_params
列を表示して、受信者と共有された内容の詳細を確認できます。 このフィールドには、次の値を含めることができます。 このリストは網羅的なものではありません。
"recipient_name": "someRecipientName"
"share_id": "ea7a4555-43d9-4cbd-a5df-f4f5193f297e"
"credential_type": "StorageCredential"
"is_permissions_enforcing_client": "true"
"table_full_name": "someTableName"
"operation": "READ"
"share_name": "someShareName"
"table_id": "someTableId"
"share_owner": "someShareOwner"
"recipient_id": "someRecipientId"
"table_url": "s3://somePath"
"metastore_id": "someMetastoreId"
ログに記録されたエラー
Delta Sharing アクションの試行が失敗した場合、そのアクションはログに記録され、ログの response.error_message
フィールドにエラー メッセージが表示されます。 <
文字から>
文字までの項目は、プレースホルダーテキストを表します。
プロバイダー ログのエラー メッセージ
Delta Sharing では、データ プロバイダーに対して次のエラーがログに記録されます。
-
Delta Sharing は、選択したメタストアで有効になっていません。
DatabricksServiceException: FEATURE_DISABLED:
Delta Sharing is not enabled -
存在しないカタログに対して操作が試行されました。
DatabricksServiceException: CATALOG_DOES_NOT_EXIST:
Catalog ‘<catalog>’ does not exist. -
アカウント管理者またはメタストア管理者ではないユーザーが、特権操作を実行しようとしました。
DatabricksServiceException: PERMISSION_DENIED:
Only administrators can <operation-name> <operation-target> -
メタストアが割り当てられていないワークスペースから、メタストアに対して操作が試行されました。
DatabricksServiceException: INVALID_STATE:
Workspace <workspace-name> is no longer assigned to this metastore -
要求に受信者名または共有名がありませんでした。
DatabricksServiceException: INVALID_PARAMETER_VALUE: CreateRecipient/CreateShare Missing required field: <recipient-name>/<share-name>
-
リクエストに無効な受取人の名前または共有名が含まれていました。
DatabricksServiceException: INVALID_PARAMETER_VALUE: CreateRecipient/CreateShare <recipient-name>/<share-name> is not a valid name
-
ユーザーが、 Unity Catalog メタストアにないテーブルを共有しようとしました。
DatabricksServiceException: INVALID_PARAMETER_VALUE: Only managed or external table on Unity Catalog can be added to a share
-
ユーザーが、既にローテーションされた状態にあり、以前のトークンの有効期限が切れていない受信者をローテーションしようとしました。
DatabricksServiceException: INVALID_PARAMETER_VALUE: There are already two active tokens for recipient <recipient-name>
-
ユーザーが新しい受信者を作成するか、既存の受信者と同じ名前で共有しようとしました。
DatabricksServiceException: RECIPIENT_ALREADY_EXISTS/SHARE_ALREADY_EXISTS: Recipient/Share <name> already exists`
-
ユーザーが存在しない受信者または共有に対して操作を実行しようとしました。
DatabricksServiceException: RECIPIENT_DOES_NOT_EXIST/SHARE_DOES_NOT_EXIST: Recipient/Share '<name>' does not exist
-
ユーザーが共有にテーブルを追加しようとしましたが、テーブルは既に追加されていました。
DatabricksServiceException: RESOURCE_ALREADY_EXISTS: Shared Table '<name>' already exists
-
ユーザーが、存在しないテーブルを参照する操作を実行しようとしました。
DatabricksServiceException: TABLE_DOES_NOT_EXIST: Table '<name>' does not exist
-
ユーザーが、存在しないスキーマを参照する操作を実行しようとしました。
DatabricksServiceException: SCHEMA_DOES_NOT_EXIST: Schema '<name>' does not exist
-
ユーザーが存在しない共有にアクセスしようとしました。
DatabricksServiceException: SHARE_DOES_NOT_EXIST: Share <share-name> does not exist.
受信者ログのエラーメッセージ
Delta Sharing では、データ受信者に関する次のエラーがログに記録されます。
-
ユーザーが、アクセス権のない共有にアクセスしようとしました。
DatabricksServiceException: PERMISSION_DENIED:
User does not have SELECT on Share <share-name> -
ユーザーが存在しない共有にアクセスしようとしました。
DatabricksServiceException: SHARE_DOES_NOT_EXIST: Share <share-name> does not exist.
-
ユーザーが共有に存在しないテーブルにアクセスしようとしました。
DatabricksServiceException: TABLE_DOES_NOT_EXIST: <table-name> does not exist.