Sdílet prostřednictvím


Referenční informace k systémové tabulce protokolu auditu

Důležité

Tato systémová tabulka je ve verzi Public Preview. Aby bylo možné získat přístup k tabulce, musí být schéma povolené v katalogu system. Další informace naleznete v tématu Povolení schémat systémových tabulek.

Tento článek popisuje schéma tabulky protokolu auditování a obsahuje ukázkové dotazy, které můžete použít se systémovou tabulkou protokolu auditu k zodpovězení běžných otázek k aktivitě účtu. Informace o událostech protokolu auditu najdete v referenčních informacích k diagnostickým protokolům.

cesta k tabulce: Tato systémová tabulka se nachází v system.access.audit.

Důležité informace o protokolu auditu

  • Většina protokolů auditu je k dispozici pouze v oblasti pracovního prostoru.
  • Záznam workspace_id protokolů auditu na úrovni účtu jako 0.

Schéma systémové tabulky protokolu auditu

Systémová tabulka protokolu auditu používá následující schéma:

Název sloupce Datový typ Popis Příklad
version string Verze schématu protokolu auditu 2.0
event_time časové razítko Časové razítko události. Informace o časovém pásmu se zaznamenávají na konci hodnoty s +00:00 představující časové pásmo UTC. 2023-01-01T01:01:01.123+00:00
event_date datum Datum kalendáře, kdy se akce uskutečnila 2023-01-01
workspace_id long ID pracovního prostoru 1234567890123456
source_ip_address string IP adresa, kde žádost pochází 10.30.0.242
user_agent string Původ požadavku Apache-HttpClient/4.5.13 (Java/1.8.0_345)
session_id string ID relace, ze které žádost byla odeslána 123456789
user_identity string Identita uživatele, který iniciuje žádost {"email": "user@domain.com",
"subjectName": null}
service_name string Název služby, který iniciuje požadavek unityCatalog
action_name string Kategorie události zachycené v protokolu auditu getTable
request_id string ID požadavku ServiceMain-4529754264
request_params map Mapa hodnot klíče obsahujících všechny parametry požadavku Závisí na typu požadavku. [["full_name_arg", "user.chat.messages"],
["workspace_id", "123456789"],
["metastore_id", "123456789"]]
response struct Struktura návratových hodnot odpovědi {"statusCode": 200, "errorMessage": null,
"result": null}
audit_level string Událost na úrovni pracovního prostoru nebo účtu ACCOUNT_LEVEL
account_id string ID účtu 23e22ba4-87b9-4cc2-9770-d10b894bxx
event_id string ID události 34ac703c772f3549dcc8671f654950f0
identity_metadata struct Identity zapojené do akce, včetně run_by a run_as. Viz auditování skupiny vyhrazené výpočetní aktivity . {run_by: example@email.com;
run_as: example@email.com;

Vzorové dotazy

Následující části obsahují ukázkové dotazy SQL, které můžete použít k získání přehledu o systémové tabulce protokolů auditu.

Poznámka:

Mezi příklady patří podrobné události protokolu auditu, které nejsou ve výchozím nastavení povolené. Pokud chcete povolit podrobné protokoly auditu v pracovním prostoru, přečtěte si téma Povolení podrobných protokolů auditu.

Tento článek obsahuje následující ukázkové dotazy:

Kdo má přístup k této tabulce?

Tento dotaz používá information_schema k určení, kteří uživatelé mají oprávnění k tabulce. Zadejte hodnoty parametrů názvu katalogu, schématu a tabulky.

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

Kteří uživatelé přistupovali k tabulce během posledních sedmi dnů?

Aby tento dotaz fungoval, zadejte do parametrů dotazu informace o cestě k tabulce.

Poznámka:

V protokolu pro operace DML nejsou zaznamenána úplná jména. Zahrňte schéma a jednoduchý název pro zachycení všech.

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

Ke kterým tabulkám uživatel nedávno přistupoval?

Aby tento dotaz fungoval, zadejte e-mail uživatele do parametru :User a do parametru :days_ago číslo.

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

Příklad výsledku

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

Zobrazení změn oprávnění pro všechny zabezpečitelné objekty

Tento dotaz vrátí událost pro každou změnu oprávnění, ke které došlo ve vašem účtu. Dotaz vrátí uživatele, který změnu provedl, zabezpečitelný typ a název objektu a konkrétní změny, které byly provedeny.

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

Zobrazení naposledy spuštěných příkazů poznámkového bloku

Tento dotaz vrátí naposledy spuštěné příkazy poznámkového bloku a uživatele, který příkaz spustil.

Poznámka:

Akce runCommand se vygeneruje jenom v případech, kdy jsou povolené podrobné protokoly auditu. Pokud chcete povolit podrobné protokoly auditu, přečtěte si téma Povolení podrobných protokolů auditu.

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

Kteří uživatelé se přihlásili k aplikaci Databricks?

Tento dotaz vrátí událost pro každé přihlášení k instanci aplikace 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

Nahraďte {{application-ID}} hodnotou ID aplikace pro instanční objekt přiřazený ke konkrétní aplikaci Databricks. Tuto hodnotu najdete v nastavení správce pracovního prostoru Databricks, který je hostitelem aplikace.

Které aplikace Databricks byly aktualizovány a změnily způsob sdílení aplikace s jinými uživateli nebo skupinami?

Tento dotaz vrátí události pro aktualizace oprávnění, které změní přístup k aplikacím Databricks, včetně typu oprávnění, uživatele nebo skupiny, ke které je nové oprávnění přiřazeno, a uživatele, který změnu odeslal.

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