Auditar e monitorar o compartilhamento de dados
Este artigo descreve como provedores e destinatários de dados podem usar logs de auditoria para monitorar eventos do OpenSharing. Logs de auditoria do provedor registram ações realizadas pelo provedor e 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.
Requisitos
Para acessar os logs de auditoria, um administrador de conta deve habilitar a tabela do sistema de logs de auditoria para sua conta Databricks. Consulte Habilitar tabelas do sistema. Para obter informações sobre a tabela do sistema de logs de auditoria, consulte Referência da tabela do sistema de logs de auditoria.
Se você não for um administrador de account ou administrador de metastore, deverá ter acesso a system.access.audit para ler logs de auditoria.
Exibir eventos do OpenSharing no log de auditoria
Se a sua account tiver tabelas do sistema habilitadas, os logs de auditoria serão armazenados em system.access.audit. Se, alternativamente, sua account tiver uma configuração de entrega de log de auditoria, você precisará saber o bucket e o caminho onde os logs são entregues.
Eventos registrados
Para visualizar a lista de eventos de log de auditoria do OpenSharing, consulte eventos do OpenSharing.
Ver detalhes do resultado da consulta de um destinatário
O OpenSharing oferece suporte ao compartilhamento de tipos de ativos como tabelas, views, views materializadas, tabelas de transmissão e volumes. OpenSharing fornece acesso de leitura temporário aos dados subjacentes a partir de URLs pré-assinadas ou de tokens STS com escopo reduzido. A tabela a seguir descreve como o tipo de compartilhamento corresponde aos eventos de log de auditoria registrados.
Cenário | Eventos de log de auditoria |
|---|---|
Tabelas compartilhadas com destinatários abertos (acesso por URL pré-assinado) e tabelas sem histórico compartilhadas com destinatários do Databricks |
|
Tabelas elegíveis compartilhadas com destinatários abertos (acesso por tokens de cloud, modo de acesso baseado em diretório). Consulte tokens de cloud e acesso baseado em diretório. |
|
Tabelas com história compartilhada com destinatários do Databricks |
|
Compartilhamento de volume (acesso baseado em token STS) |
|
Visualizar detalhes sobre compartilhamentos de URL pré-assinados
Nos logs do provedor, os eventos deltaSharingQueriedTableChanges e deltaSharingQueriedTable são registrados depois que a consulta de um destinatário de dados obtém uma resposta para compartilhamento baseado em URL pré-assinado. Os provedores podem ver o campo response.result desses logs para consultar 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"
view detalhes sobre compartilhamentos de tokens STS
Nos logs do provedor, os eventos generateTemporaryTableCredentials e generateTemporaryVolumeCredentials são registrados depois que a consulta de um destinatário de dados obtém uma resposta para compartilhamento baseado em tokens STS. Os provedores podem visualizar a coluna request_params 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.
"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"
Erros registrados
Se uma ação OpenSharing tentada falhar, a ação é registrada com a mensagem de erro no campo response.error_message do log. Os itens entre < e > caracteres representam texto de espaço reservado.
Mensagens de erro nos logs do provedor
OpenSharing registra os seguintes erros para provedores de dados:
-
OpenSharing não está habilitado no metastore selecionado.
DatabricksServiceException: FEATURE_DISABLED:
Delta Sharing is not enabled -
Uma operação foi tentada em um catálogo que não existe.
DatabricksServiceException: CATALOG_DOES_NOT_EXIST:
Catalog '<catalog>' does not exist. -
Um usuário que não é administrador de account ou administrador de metastore tentou realizar uma operação privilegiada.
DatabricksServiceException: PERMISSION_DENIED:
Only administrators can <operation-name> <operation-target> -
Uma operação foi tentada 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 -
Uma solicitação estava sem o nome do destinatário ou o nome do compartilhamento.
DatabricksServiceException: INVALID_PARAMETER_VALUE: CreateRecipient/CreateShare Missing required field: <recipient-name>/<share-name> -
Uma solicitação incluía um nome de destinatário inválido ou nome de compartilhamento.
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 Unity Catalog.
DatabricksServiceException: INVALID_PARAMETER_VALUE: Only managed or external table on Unity Catalog can be added to a share -
Um usuário tentou rotacionar um destinatário que já estava em um estado rotacionado 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 novo destinatário ou compartilhamento com o mesmo nome de um existente.
DatabricksServiceException: RECIPIENT_ALREADY_EXISTS/SHARE_ALREADY_EXISTS: Recipient/Share <name> already exists` -
Um usuário tentou realizar uma operação em um destinatário ou compartilhamento que não existe.
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 realizar uma operação que fazia referência a uma tabela que não existe.
DatabricksServiceException: TABLE_DOES_NOT_EXIST: Table '<name>' does not exist -
Um usuário tentou realizar uma operação que fazia referência a um esquema que não existia.
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 logs do destinatário
OpenSharing registra os seguintes erros para destinatários de dados:
-
O usuário tentou acessar um compartilhamento para o qual não tem permissão.
DatabricksServiceException: PERMISSION_DENIED:
User does not have SELECT on Share <share-name> -
O usuário tentou acessar um compartilhamento que não existe.
DatabricksServiceException: SHARE_DOES_NOT_EXIST: Share <share-name> does not exist. -
O usuário tentou acessar uma tabela que não existe no compartilhamento.
DatabricksServiceException: TABLE_DOES_NOT_EXIST: <table-name> does not exist.