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 v system
katalogu povolené. 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 auditování k odpovědi na běžné otázky týkající se použití úč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í na system.access.audit
adrese .
Důležité informace o protokolu auditu
- Většina protokolů auditu je k dispozici pouze v oblasti pracovního prostoru.
- Ve všech oblastech jsou k dispozici pouze protokoly na úrovni účtu Katalogu Unity.
- Záznam
workspace_id
protokolů auditu na úrovni účtu jako0
.
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 reprezentací +00:00 časového pásma 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 pochází | 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 |
Vzorové dotazy
Následující části obsahují ukázkové dotazy, které můžete použít k získání přehledu o systémové tabulce protokolů auditu. Aby tyto dotazy fungovaly, nahraďte hodnoty ve složených závorkách {{}}
vašimi parametry.
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á k této tabulce přístup?
- Kteří uživatelé přistupovali k tabulce během posledního dne?
- Ke kterým tabulkám uživatel přistupoval?
- Zobrazení změn oprávnění pro všechny zabezpečitelné objekty
- Zobrazení naposledy spuštěných příkazů poznámkového bloku
- Kteří uživatelé se přihlásili k aplikaci Databricks?
- Které aplikace Databricks byly aktualizovány a změnily způsob sdílení aplikace s jinými uživateli nebo skupinami?
Kdo má k této tabulce přístup?
Tento dotaz používá information_schema
k určení, kteří uživatelé mají oprávnění k tabulce.
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}}'
UNION
SELECT DISTINCT(grantee)
FROM system.information_schema.schema_privileges
WHERE schema_name = '{{schema_name}}'
Kteří uživatelé přistupovali k tabulce během posledního dne?
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 = '{{catalog.schema.table}}'
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 '1 day'
ORDER BY event_date DESC
Ke kterým tabulkám uživatel přistupoval?
Poznámka:
Pokud chcete filtrovat podle rozsahu kalendářních dat, odkomentujte klauzuli data v dolní části dotazu.
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) < 1
-- 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