Auditar e monitorar o compartilhamento de dados

Este artigo descreve como os provedores e destinatários de dados podem usar os logs de auditoria para monitorar os eventos do Compartilhamento Delta. Os logs de auditoria do provedor registram as ações realizadas pelo provedor e as ações realizadas pelos destinatários nos dados compartilhados do provedor. Os logs de auditoria do destinatário registram eventos relacionados ao acesso a compartilhamentos e ao gerenciamento de objetos do provedor.

Para exibir a lista de eventos do log de auditoria do Compartilhamento Delta, consulte Eventos do Compartilhamento Delta.

Requisitos

Para acessar os logs de auditoria, um administrador de conta deve habilitar a tabela do sistema de logs de auditoria para a sua conta do Azure Databricks. Consulte Habilitar as tabelas do sistema. Para obter mais informações sobre a tabela do sistema de log de auditoria, consulte Referência da, tabela do sistema de log de auditoria.

Se você não for um administrador de conta ou administrador de metastore, deverá ter acesso a system.access.audit para ler os logs de auditoria.

Exibir eventos do Delta Sharing no log de auditoria

Se sua conta tiver tabelas do sistema habilitadas, os logs de auditoria serão armazenados em system.access.audit. Se, alternativamente, sua conta tiver uma configuração de entrega de logs de auditoria, você precisará saber o bucket e o caminho em que os logs são entregues.

Eventos registrados

Para exibir a lista de eventos de log de auditoria do Compartilhamento Delta, consulte Eventos do Compartilhamento Delta.

Exibir detalhes do resultado da consulta de um destinatário

Nos logs do provedor, os eventos retornados como deltaSharingQueriedTableChanges e deltaSharingQueriedTable são registrados depois que a consulta de um destinatário de dados obtém uma resposta. Os provedores podem exibir o campo response.result desses logs para ver mais detalhes sobre o que foi compartilhado com o destinatário. O campo pode incluir os seguintes valores. Esta lista não é exaustiva.

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

Erros registrados em log

Se uma tentativa de ação de Compartilhamento Delta falhar, a ação será registrada com a mensagem de erro no campo response.error_message do registro. Os itens entre os caracteres < e > representam o texto de espaço reservado.

Mensagens de erro nos registros do provedor

O Compartilhamento Delta registra os seguintes erros para provedores de dados:

  • O Compartilhamento Delta não está habilitado no metastore selecionado.

    DatabricksServiceException: FEATURE_DISABLED:
    Delta Sharing is not enabled
    
  • Houve uma tentativa de executar uma operação em um catálogo não existente.

    DatabricksServiceException: CATALOG_DOES_NOT_EXIST:
    Catalog ‘<catalog>’ does not exist.
    
  • Um usuário que não é administrador da conta ou administrador do metastore tentou executar uma operação privilegiada.

    DatabricksServiceException: PERMISSION_DENIED:
    Only administrators can <operation-name> <operation-target>
    
  • Houve uma tentativa de executar uma operação em um metastore de um workspace ao qual o metastore não está atribuído.

    DatabricksServiceException: INVALID_STATE:
    Workspace <workspace-name> is no longer assigned to this metastore
    
  • Um nome de destinatário ou um nome de compartilhamento estava ausente na solicitação.

    DatabricksServiceException: INVALID_PARAMETER_VALUE: CreateRecipient/CreateShare Missing required field: <recipient-name>/<share-name>
    
  • Uma solicitação incluía um nome de destinatário ou um nome de compartilhamento inválido.

    DatabricksServiceException: INVALID_PARAMETER_VALUE: CreateRecipient/CreateShare <recipient-name>/<share-name> is not a valid name
    
  • Um usuário tentou compartilhar uma tabela que não está em um metastore do Catálogo do Unity.

    DatabricksServiceException: INVALID_PARAMETER_VALUE: Only managed or external table on Unity Catalog can be added to a share
    
  • Um usuário tentou girar um destinatário que já estava em um estado girado e cujo token anterior ainda não havia expirado.

    DatabricksServiceException: INVALID_PARAMETER_VALUE: There are already two active tokens for recipient <recipient-name>
    
  • Um usuário tentou criar um destinatário ou um compartilhamento com o mesmo nome de um existente.

    DatabricksServiceException: RECIPIENT_ALREADY_EXISTS/SHARE_ALREADY_EXISTS: Recipient/Share <name> already exists`
    
  • Um usuário tentou executar uma operação em um destinatário ou um compartilhamento não existente.

    DatabricksServiceException: RECIPIENT_DOES_NOT_EXIST/SHARE_DOES_NOT_EXIST: Recipient/Share '<name>' does not exist
    
  • Um usuário tentou adicionar uma tabela a um compartilhamento, mas a tabela já havia sido adicionada.

    DatabricksServiceException: RESOURCE_ALREADY_EXISTS: Shared Table '<name>' already exists
    
  • Um usuário tentou executar uma operação que referenciava uma tabela não existente.

    DatabricksServiceException: TABLE_DOES_NOT_EXIST: Table '<name>' does not exist
    
  • Um usuário tentou executar uma operação que referenciava um esquema não existente.

    DatabricksServiceException: SCHEMA_DOES_NOT_EXIST: Schema '<name>' does not exist
    
  • Um usuário tentou acessar um compartilhamento que não existe.

    DatabricksServiceException: SHARE_DOES_NOT_EXIST: Share <share-name> does not exist.
    

Mensagens de erro nos registros de destinatários

O Compartilhamento Delta registra os seguintes erros para destinatários de dados:

  • O usuário tentou acessar um compartilhamento que não tem permissão para acessar.

    DatabricksServiceException: PERMISSION_DENIED:
    User does not have SELECT on Share <share-name>
    
  • O usuário tentou acessar um compartilhamento não existente.

    DatabricksServiceException: SHARE_DOES_NOT_EXIST: Share <share-name> does not exist.
    
  • O usuário tentou acessar uma tabela não existente no compartilhamento.

    DatabricksServiceException: TABLE_DOES_NOT_EXIST: <table-name> does not exist.