Referenz zur Systemtabelle des Überwachungsprotokolls
Wichtig
Diese Systemtabelle befindet sich in der Public Preview. Um auf die Tabelle zuzugreifen, muss das Schema in Ihrem system
Katalog aktiviert sein. Weitere Informationen finden Sie unter Aktivieren des Systemtabellenschemas.
Dieser Artikel beschreibt das Schema der Überwachungsprotokolltabelle und enthält Beispielabfragen, die Sie mit der Systemtabelle des Überwachungsprotokolls verwenden können, um allgemeine Fragen zur Kontonutzung zu beantworten. Informationen zu Überwachungsprotokollereignissen finden Sie unter Referenz zu Diagnoseprotokollen.
Tabellenpfad: Diese Systemtabelle befindet sich unter system.access.audit
.
Überlegungen zu Überwachungsprotokollen
- Die meisten Überwachungsprotokolle sind nur in der Region des Arbeitsbereichs verfügbar.
- Überwachungsprotokolle auf Kontoebene erfassen
workspace_id
als0
.
Schema der Überwachungsprotokollsystemtabelle
Die Überwachungsprotokollsystemtabelle verwendet das folgende Schema:
Spaltenname | Datentyp | Beschreibung | Beispiel |
---|---|---|---|
version |
Zeichenfolge | Version des Überwachungsprotokollschemas | 2.0 |
event_time |
Zeitstempel | Zeitstempel des Ereignisses Zeitzoneninformationen werden am Ende des Werts aufgezeichnet, wobei +00:00 die Zeitzone „UTC“ darstellt. |
2023-01-01T01:01:01.123+00:00 |
event_date |
date | Kalenderdatum der Aktion | 2023-01-01 |
workspace_id |
long | ID des Arbeitsbereichs | 1234567890123456 |
source_ip_address |
Zeichenfolge | IP-Adresse, von der die Anforderung stammt | 10.30.0.242 |
user_agent |
Zeichenfolge | Ursprung der Anforderung | Apache-HttpClient/4.5.13 (Java/1.8.0_345) |
session_id |
Zeichenfolge | ID der Sitzung, aus der die Anforderung stammt | 123456789 |
user_identity |
Zeichenfolge | Identität des Benutzers, der die Anforderung initiiert | {"email": "user@domain.com", "subjectName": null} |
service_name |
Zeichenfolge | Name des Dienstes, der die Anforderung initiiert | unityCatalog |
action_name |
Zeichenfolge | Kategorie des im Überwachungsprotokoll erfassten Ereignisses | getTable |
request_id |
Zeichenfolge | ID der Anforderung | ServiceMain-4529754264 |
request_params |
map | Zuordnung der Schlüsselwerte, die alle Anforderungsparameter enthalten. Abhängig vom Anforderungstyp | [["full_name_arg", "user.chat.messages"], ["workspace_id", "123456789"], ["metastore_id", "123456789"]] |
response |
struct | Struktur der Antwortrückgabewerte | {"statusCode": 200, "errorMessage": null, "result": null} |
audit_level |
Zeichenfolge | Ereignis auf Arbeitsbereichs- oder Kontoebene | ACCOUNT_LEVEL |
account_id |
Zeichenfolge | ID des Kontos | 23e22ba4-87b9-4cc2-9770-d10b894bxx |
event_id |
Zeichenfolge | ID des Ereignisses | 34ac703c772f3549dcc8671f654950f0 |
Beispielabfragen
Die folgenden Abschnitte enthalten Beispielabfragen, die Sie verwenden können, um Erkenntnisse zu Ihrer Überwachungsprotokollsystemtabelle zu gewinnen. Damit diese Abfragen funktionieren, ersetzen Sie die Werte in geschweiften Klammern {{}}
durch Ihre Parameter.
Hinweis
Einige Beispiele sind ausführliche Überwachungsprotokollereignisse, die standardmäßig nicht aktiviert sind. Informationen zum Aktivieren ausführlicher Überwachungsprotokolle in einem Arbeitsbereich finden Sie unter Aktivieren ausführlicher Überwachungsprotokolle.
Dieser Artikel enthält die folgenden Beispielabfragen:
- Wer kann auf diese Tabelle zugreifen?
- Welche Benutzer*innen haben innerhalb des letzten Tages auf eine Tabelle zugegriffen?
- Auf welche Tabellen hat ein*e Benutzer*in zugegriffen?
- Anzeigen von Berechtigungsänderungen für alle sicherungsfähigen Objekte
- Anzeigen der zuletzt ausgeführten Notebookbefehle
- Welche Benutzer haben sich bei einer Databricks-App angemeldet?
- Welche Databricks-Apps wurden aktualisiert, um zu ändern, wie die App für andere Benutzer oder Gruppen freigegeben wird?
Wer kann auf diese Tabelle zugreifen?
Diese Abfrage verwendet die information_schema
, um zu bestimmen, welche Benutzer über Berechtigungen für eine Tabelle verfügen.
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}}'
Welche Benutzer*innen haben innerhalb des letzten Tages auf eine Tabelle zugegriffen?
Hinweis
Vollständige Namen werden nicht im Protokoll für DML-Vorgänge erfasst. Fügen Sie das Schema und den einfachen Namen ein, um alle zu erfassen.
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
Auf welche Tabellen hat ein*e Benutzer*in zugegriffen?
Hinweis
Um nach Datumsbereich zu filtern, heben Sie die Auskommentierung der date-Klausel am Ende der Abfrage auf.
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
Beispielergebnis
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 |
Anzeigen von Berechtigungsänderungen für alle sicherungsfähigen Objekte
Diese Abfrage gibt ein Ereignis für jede Berechtigungsänderung in Ihrem Konto zurück. Die Abfrage gibt den Benutzer, der die Änderung vorgenommen hat, den sicherungsfähigen Objekttyp und -namen sowie die spezifischen vorgenommenen Änderungen zurück.
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
Anzeigen der zuletzt ausgeführten Notebookbefehle
Diese Abfrage gibt die zuletzt ausgeführten Notizbuchbefehle und den Benutzer zurück, der den Befehl ausgeführt hat.
Hinweis
Die runCommand
-Aktion wird nur ausgegeben, wenn ausführliche Überwachungsprotokolle aktiviert sind. Informationen zum Aktivieren ausführlicher Überwachungsprotokolle finden Sie unter Aktivieren ausführlicher Überwachungsprotokolle.
SELECT event_time, user_identity.email, request_params.commandText
FROM system.access.audit
WHERE action_name = `runCommand`
ORDER BY event_time DESC
LIMIT 100
Welche Benutzer haben sich bei einer Databricks-App angemeldet?
Diese Abfrage gibt ein Ereignis für jede Anmeldung bei einer Databricks-App-Instanz zurück.
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
Ersetzen Sie durch {{application-ID}}
den Anwendungs-ID-Wert für den Dienstprinzipal, der einer bestimmten Databricks-App zugewiesen ist. Dieser Wert befindet sich in den Administratoreinstellungen für den Databricks-Arbeitsbereich, in dem die App gehostet wird.
Welche Databricks-Apps wurden aktualisiert, um zu ändern, wie die App für andere Benutzer oder Gruppen freigegeben wird?
Diese Abfrage gibt Ereignisse für Berechtigungsaktualisierungen zurück, um den Zugriff auf Databricks-Apps zu ändern, einschließlich des Berechtigungstyps, des Benutzers oder der Gruppe, dem die neue Berechtigung zugewiesen ist, und dem Benutzer, der die Änderung übermittelt hat.
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