Condividi tramite


Sistema di registro di audit table: informazioni di riferimento

Importante

Questo sistema table è in anteprima pubblica. Per accedere all'table, il schema deve essere abilitato nel systemcatalog. Per altre informazioni, vedere Abilitare schemi di sistema table.

Questo articolo descrive il log di controllo tableschema e include query di esempio che è possibile utilizzare con il sistema di log di controllo table per rispondere alle domande più comuni sull'uso degli account. Per informazioni sugli eventi del log di controllo, vedere Informazioni di riferimento sul log di diagnostica.

Table percorso: questo sistema table si trova in system.access.audit.

Considerazioni sul log di controllo

  • La maggior parte dei log di controllo è disponibile solo nell'area dell'area di lavoro.
  • I log di controllo a livello di account registrano workspace_id come 0.

Sistema di registro di controllo tableschema

Il sistema di registro di controllo table utilizza i seguenti schema:

nome Column Tipo di dati Descrizione Esempio
version string Versione del registro di controllo schema 2.0
event_time timestamp Timestamp dell'evento. Le informazioni Timezone vengono registrate alla fine del valore mentre +00:00 rappresenta l'UTC timezone. 2023-01-01T01:01:01.123+00:00
event_date data Data del calendario in cui è stata eseguita l'azione 2023-01-01
workspace_id long ID dell'area di lavoro 1234567890123456
source_ip_address string Indirizzo IP where da cui ha avuto origine la richiesta 10.30.0.242
user_agent string Origine della richiesta Apache-HttpClient/4.5.13 (Java/1.8.0_345)
session_id string ID della sessione where da cui proviene la richiesta 123456789
user_identity string Identità della richiesta di avvio dell'utente {"email": "user@domain.com",
"subjectName": null}
service_name string Richiesta di avvio del nome del servizio unityCatalog
action_name string Categoria dell'evento acquisito nel log di controllo getTable
request_id string ID della richiesta ServiceMain-4529754264
request_params mappa Mappa chiave values contenente tutte le richieste parameters. Dipende dal tipo di richiesta [["full_name_arg", "user.chat.messages"],
["workspace_id", "123456789"],
["metastore_id", "123456789"]]
response struct Struttura della restituzione della risposta values {"statusCode": 200, "errorMessage": null,
"result": null}
audit_level string Evento a livello di area di lavoro o account ACCOUNT_LEVEL
account_id string ID dell'account 23e22ba4-87b9-4cc2-9770-d10b894bxx
event_id string ID dell'evento 34ac703c772f3549dcc8671f654950f0
identity_metadata struct Identità coinvolte nell'azione, incluse run_by e run_as. Consultare attività di calcolo dedicata del gruppo di audit. {run_by: example@email.com;
run_as: example@email.com;

Query di esempio

Le sezioni seguenti includono query SQL di esempio che è possibile usare per ottenere informazioni dettagliate sul sistema dei log di controllo table.

Nota

Alcuni esempi includono eventi del log di controllo dettagliato, che non sono abilitati per impostazione predefinita. Per abilitare i log di controllo dettagliati in un'area di lavoro, vedere Abilitare i log di controllo dettagliati.

Questo articolo include le query di esempio seguenti:

Chi può accedere a questo table?

Questa query usa il information_schema per determinare quali utenti hanno autorizzazioni su un table. Immettere values per il nome schema e il nome tableparameters.

SELECT
  DISTINCT(grantee) AS `ACCESSIBLE BY`
FROM
  system.information_schema.table_privileges
WHERE
  table_schema = :schema_name
  AND table_name = :table_name
UNION
SELECT
  table_owner
FROM
  system.information_schema.tables
WHERE
  table_schema = :schema_name
  AND table_name = :table_name
UNION
SELECT
  DISTINCT(grantee)
FROM
  system.information_schema.schema_privileges
WHERE
  schema_name = :schema_name

Quali utenti hanno eseguito l'accesso a un table negli ultimi sette giorni?

Per il corretto funzionamento di questa query, immettere le informazioni sul percorso table nella query parameters.

Nota

I nomi completi non vengono acquisiti nel log per le operazioni DML. Includere il schema e il nome semplice per acquisire tutto.

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

A quale tables ha avuto accesso un utente di recente?

Per il funzionamento di questa query, immettere il messaggio di posta elettronica dell'utente nel parametro :User e un numero nel parametro :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

Risultato di esempio

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

Visualizzare le modifiche alle autorizzazioni per tutti gli oggetti a protezione diretta

Questa query restituirà un evento per ogni modifica dell'autorizzazione che si è verificata nell'account. La query restituirà l'utente che ha apportato la modifica, il tipo di oggetto a protezione diretta e il nome e le modifiche specifiche apportate.

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

Visualizzare i comandi dei notebook eseguiti più di recente

Questa query restituisce i comandi del notebook di esecuzione più recenti e l'utente che ha eseguito il comando.

Nota

L'azione runCommand viene generata solo quando sono abilitati i log di controllo dettagliati. Per abilitare i log di controllo dettagliati, vedere Abilitare i log di controllo dettagliati.

SELECT event_time, user_identity.email, request_params.commandText
FROM system.access.audit
WHERE action_name = `runCommand`
ORDER BY event_time DESC
LIMIT 100

Quali utenti hanno eseguito l'accesso a un'app Databricks?

Questa query restituisce un evento per ogni account di accesso a un'istanza dell'app 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

Sostituire {{application-ID}} con il valore ID applicazione per l'entità servizio assegnata a un'app Databricks specifica. Questo valore è disponibile nelle impostazioni di amministrazione per l'area di lavoro di Databricks che ospita l'app.

Quali app di Databricks sono state aggiornate per modificare la modalità di condivisione dell'app con altri utenti o gruppi?

Questa query restituisce eventi per gli aggiornamenti delle autorizzazioni per modificare l'accesso alle app Databricks, tra cui il tipo di autorizzazione, l'utente o il gruppo a cui viene assegnata la nuova autorizzazione e l'utente che ha inviato la modifica.

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