メインコンテンツまでスキップ

データ共有の監査と監視

この記事では、データプロバイダーと受信者が監査ログを使用してOpenSharingイベントを監視する方法を説明します。プロバイダー監査ログには、プロバイダーが実行したアクションと、プロバイダーの共有データに対する受信者が実行したアクションが記録されます。受信者監査ログは、共有へのアクセスおよびプロバイダーオブジェクトの管理に関連するイベントを記録します。

要件

監査ログにアクセスするには、アカウント管理者がDatabricksアカウントの監査ログシステムテーブルを有効にする必要があります。システムテーブルを有効にするを参照してください。監査ログシステムテーブルに関する情報については、監査ログシステムテーブルリファレンスを参照してください。

アカウント管理者またはメタストア管理者ではない場合、監査ログを読み取るにはsystem.access.auditへのアクセス権を付与されている必要があります。

監査ログの OpenSharing イベントを表示

アカウントでシステムテーブルが有効になっている場合、監査ログはsystem.access.auditに保存されます。あるいは、アカウントに監査ログ配信が設定されている場合は、ログが配信されるバケットとパスを知っておく必要があります。

記録されたイベント

OpenSharing監査ログイベントのリストを表示するには、 のOpenSharingイベントを参照してください。

受信者のクエリ結果の詳細を表示

OpenSharing は、テーブル、ビュー、マテリアライズドビュー、ストリーミング可能、ボリュームなどの資産タイプの共有をサポートしています。OpenSharing は、署名済み URL またはスコープダウンされた STS トークンから基になるデータへの一時的な読み取りアクセスを提供します。次の表は、共有タイプがログに記録された監査ログイベントにどのように対応するかを示しています。

シナリオ

監査ログイベント

オープンな受信者と共有されるテーブル (事前署名された URL アクセス) および履歴のない Databricks 受信者と共有されるテーブル

  • deltaSharingQueriedTable (テーブルのクエリー用) - deltaSharingQueriedTableChanges (CDF クエリの場合)

オープン受信者と共有されている対象テーブル(クラウドトークンアクセス、ディレクトリベースアクセスモード)。クラウドトークンとディレクトリベースアクセスを参照してください。

  • generateTemporaryTableCredential

履歴がDatabricks受信者と共有されているテーブル

  • generateTemporaryTableCredential

ボリューム共有(STS トークンベースのアクセス)

  • generateTemporaryVolumeCredential

署名付きURL共有の詳細を表示

プロバイダーログでは、データ受信者のクエリが事前署名されたURLベースの共有に対する応答を取得した後、イベントdeltaSharingQueriedTableChangesdeltaSharingQueriedTableがログに記録されます。プロバイダーはこれらのログのresponse.resultフィールドを表示して、受信者と共有された内容の詳細を確認できます。フィールドには次の値を指定できます。このリストはすべてを網羅しているわけではありません。

JSON
"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トークンベースの共有に対する応答を受け取った後に、イベントgenerateTemporaryTableCredentialsgenerateTemporaryVolumeCredentialsがログに記録されます。プロバイダーは、受信者と共有された内容の詳細を確認するために、これらのログのrequest_params列を表示できます。フィールドには次の値を指定できます。このリストはすべてを網羅しているわけではありません。

JSON
"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"

ログに記録されたエラー

OpenSharingアクションの実行に失敗した場合、そのアクションとエラーメッセージはログのresponse.error_messageフィールドに記録されます。<>文字の項目はプレースホルダーテキストを表します。

プロバイダーログのエラーメッセージ

OpenSharing は、データプロバイダーに対して以下のエラーを記録します:

  • オープン共有は、選択されたメタストアで有効になっていません。

    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.

受信者ログのエラーメッセージ

OpenSharing はデータ受信者向けに次のエラーをログに記録します。

  • ユーザーは、アクセス権のない共有にアクセスしようとしました。

    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.