Referência da tabela do sistema de log de auditoria
Importante
Esta tabela do sistema está em Public Preview. Para acessar a tabela, o esquema deve ser habilitado em seu catálogo de system
. Para obter mais informações, consulte Habilitar esquemas de tabela do sistema.
Este artigo descreve o esquema da tabela de log de auditoria e tem consultas de exemplo que você pode usar com a tabela do sistema de log de auditoria para responder a perguntas comuns sobre a atividade da conta. Para obter informações sobre eventos de log de auditoria, consulte Referência de log de diagnóstico.
Caminho da tabela: Esta tabela do sistema está localizada em system.access.audit
.
Considerações sobre o log de auditoria
- A maioria dos logs de auditoria só está disponível na região do espaço de trabalho.
- Os logs de auditoria no nível da conta registram
workspace_id
como0
.
Esquema da tabela do sistema de log de auditoria
A tabela do sistema de log de auditoria usa o seguinte esquema:
Consultas de amostra
As seções a seguir incluem exemplos de consultas SQL que você pode usar para obter informações sobre sua tabela do sistema de logs de auditoria.
Nota
Alguns exemplos incluem eventos detalhados de log de auditoria, que não são habilitados por padrão. Para habilitar logs de auditoria detalhados em um espaço de trabalho, consulte Habilitar logs de auditoria detalhados.
Este artigo inclui as seguintes consultas de exemplo:
- Quem pode aceder a esta tabela?
- Que utilizadores acederam a uma tabela nos últimos sete dias?
- Quais tabelas um usuário acessou recentemente?
- Exibir alterações de permissões para todos os objetos protegíveis
- Ver os comandos do bloco de notas executados mais recentemente
- Quais usuários fizeram login em um aplicativo Databricks?
- Quais aplicativos Databricks foram atualizados para alterar a forma como o aplicativo é compartilhado com outros usuários ou grupos?
Quem pode aceder a esta tabela?
Essa consulta usa o information_schema
para determinar quais usuários têm permissões em uma tabela. Insira valores para os parâmetros de catálogo, esquema e nome da tabela.
SELECT DISTINCT(grantee), privilege_type, 'catalog' AS level
FROM system.information_schema.catalog_privileges
WHERE
catalog_name = :catalog_name
UNION
SELECT DISTINCT(grantee), privilege_type, 'schema' AS level
FROM system.information_schema.schema_privileges
WHERE
catalog_name = :catalog_name AND schema_name = :schema_name
UNION
SELECT DISTINCT(grantee) AS `accessible by`, privilege_type, 'table' AS level
FROM
system.information_schema.table_privileges
WHERE
table_catalog = :catalog_name AND table_schema = :schema_name AND table_name = :table_name
UNION
SELECT table_owner, 'ALL_PRIVILEGES' AS privilege_type, 'owner' AS level
FROM system.information_schema.tables
WHERE
table_catalog = :catalog_name AND table_schema = :schema_name AND table_name = :table_name
Que utilizadores acederam a uma tabela nos últimos sete dias?
Para que essa consulta funcione, insira as informações do caminho da tabela nos parâmetros da consulta.
Nota
Os nomes completos não são capturados no log para operações DML. Inclua o esquema e o nome genérico para capturar tudo.
SELECT
user_identity.email as `User`,
IFNULL(
request_params.full_name_arg,
request_params.name
) AS `Table`,
action_name AS `Type of Access`,
event_time AS `Time of Access`
FROM
system.access.audit
WHERE
(
request_params.full_name_arg = :table_full_name
OR (
request_params.name = :table_name
AND request_params.schema_name = :schema_name
)
)
AND action_name IN ('createTable', 'getTable', 'deleteTable')
AND event_date > now() - interval 7 day
ORDER BY
event_date DESC
Quais tabelas um usuário acessou recentemente?
Para que essa consulta funcione, insira o e-mail do usuário no parâmetro :User
e um número no parâmetro :days_ago
.
SELECT
action_name as `EVENT`,
event_time as `WHEN`,
IFNULL(request_params.full_name_arg, 'Non-specific') AS `TABLE ACCESSED`,
IFNULL(request_params.commandText, 'GET table') AS `QUERY TEXT`
FROM
system.access.audit
WHERE
user_identity.email = :User
AND action_name IN (
'createTable',
'commandSubmit',
'getTable',
'deleteTable'
)
AND datediff(now(), event_date) < :days_ago
ORDER BY
event_date DESC
Exemplo de resultado
EVENT |
WHEN |
TABLE ACCESSED |
QUERY TEXT |
---|---|---|---|
getTable |
2023-05-31 |
system.access.audit |
GET table |
getTable |
2023-05-31 |
system.access.table_lineage |
GET table |
commandSubmit |
2023-05-31 |
Non-specific |
show functions; |
commandSubmit |
2023-05-31 |
Non-specific |
SELECT request_params FROM system.access.audit WHERE service_name = "notebook" AND action_name = "moveFolder" LIMIT 5 |
Exibir alterações de permissões para todos os objetos protegíveis
Essa consulta retornará um evento para cada alteração de permissão que ocorreu em sua conta. A consulta retornará o usuário que fez a alteração, o tipo e o nome do objeto protegível e as alterações específicas que foram feitas.
SELECT event_time, user_identity.email, request_params.securable_type, request_params.securable_full_name, request_params.changes
FROM system.access.audit
WHERE service_name = 'unityCatalog'
AND action_name = 'updatePermissions'
ORDER BY 1 DESC
Ver os comandos do bloco de notas executados mais recentemente
Essa consulta retorna os comandos do bloco de anotações executados mais recentemente e o usuário que executou o comando.
Nota
A runCommand
ação só é emitida quando os logs de auditoria detalhados estão habilitados. Para habilitar logs de auditoria detalhados, consulte Habilitar logs de auditoria detalhados.
SELECT event_time, user_identity.email, request_params.commandText
FROM system.access.audit
WHERE action_name = `runCommand`
ORDER BY event_time DESC
LIMIT 100
Quais usuários fizeram login em um aplicativo Databricks?
Essa consulta retorna um evento para cada logon em uma instância do aplicativo Databricks.
SELECT
event_date,
workspace_id,
request_params.request_object_id as app,
user_identity.email as user_email,
user_identity.subject_name as username
FROM
system.access.audit
WHERE
action_name IN ("workspaceInHouseOAuthClientAuthentication", "mintOAuthToken", "mintOAuthAuthorizationCode")
AND
request_params["client_id"] LIKE "{{application-ID}}"
GROUP BY
event_date,
workspace_id,
app,
user_email,
username
Substitua {{application-ID}}
pelo valor de ID do aplicativo para a entidade de serviço atribuída a um aplicativo Databricks específico. Esse valor pode ser encontrado nas configurações de administrador do espaço de trabalho Databricks que hospeda o aplicativo.
Quais aplicativos Databricks foram atualizados para alterar a forma como o aplicativo é compartilhado com outros usuários ou grupos?
Essa consulta retorna eventos para atualizações de permissão para alterar o acesso aos aplicativos Databricks, incluindo o tipo de permissão, o usuário ou grupo ao qual a nova permissão é atribuída e o usuário que enviou a alteração.
SELECT
event_date,
workspace_id,
request_params['request_object_id'] as app,
user_identity['email'] as sharing_user,
acl_entry['group_name'],
acl_entry['user_name'],
acl_entry['permission_level']
FROM
system.access.audit t
LATERAL VIEW
explode(from_json(request_params['access_control_list'], 'array<struct<user_name:string,permission_level:string,group_name:string>>')) acl_entry AS acl_entry
WHERE
action_name = 'changeAppsAcl'
AND
request_params['request_object_type'] = 'apps'
ORDER BY
event_date DESC