Freigeben über


Referenz zur Systemtabelle des Überwachungsprotokolls

Wichtig

Diese Systemtabelle befindet sich in der Public Preview.

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 Kontoaktivität zu beantworten. Informationen zu Überwachungsprotokollereignissen finden Sie unter Referenz zu Diagnoseprotokollen.

Tabellenpfad: Diese Systemtabelle befindet sich unter system.access.audit.

Überlegungen zu Prüfprotokollen

  • Die meisten Überwachungsprotokolle sind nur in der Region des Arbeitsbereichs verfügbar.
  • Überwachungsprotokolle auf Kontoebene erfassen workspace_id als 0.

Schema der Systemtabelle für Überwachungsprotokolle

Die Überwachungsprotokollsystemtabelle verwendet das folgende Schema:

Spaltenname Datentyp Beschreibung Beispiel
account_id Zeichenfolge ID des Kontos 23e22ba4-87b9-4cc2-9770-d10b894bxx
workspace_id Zeichenfolge ID des Arbeitsbereichs 1234567890123456
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 Datum Kalenderdatum der Aktion 2023-01-01
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 Struktur 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 Karte Karte von Schlüsselwerten, die alle Anforderungsparameter enthalten. Abhängig vom Anforderungstyp [["full_name_arg", "user.chat.messages"],
["workspace_id", "123456789"],
["metastore_id", "123456789"]]
response Struktur Struktur der Antwortrückgabewerte {"statusCode": 200, "errorMessage": null,
"result": null}
audit_level Zeichenfolge Ereignis auf Arbeitsbereichs- oder Kontoebene ACCOUNT_LEVEL
event_id Zeichenfolge ID des Ereignisses 34ac703c772f3549dcc8671f654950f0
identity_metadata Struktur Identitäten, die an der Aktion beteiligt sind, einschließlich run_by und run_as. Siehe Überwachen der gruppenzugeordneten Computeaktivität. {run_by: example@email.com;
run_as: example@email.com;

Beispielabfragen

Die folgenden Abschnitte enthalten Beispiel-SQL-Abfragen, die Sie verwenden können, um Einblicke in Ihre Systemtabelle für Überwachungsprotokolle zu erhalten.

Hinweis

Einige Beispiele umfassen 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?

Diese Abfrage verwendet die information_schema , um zu bestimmen, welche Benutzer über Berechtigungen für eine Tabelle verfügen. Geben Sie Werte für die Parameter "Katalog", "Schema" und "Tabellenname" ein.

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

Welche Benutzer haben innerhalb der letzten sieben Tage auf eine Tabelle zugegriffen?

Damit diese Abfrage funktioniert, geben Sie die Tabellenpfadinformationen in die Abfrageparameter ein.

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 = :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

Auf welche Tabellen hat ein Benutzer kürzlich zugegriffen?

Damit diese Abfrage funktioniert, geben Sie die E-Mail-Adresse des Benutzers in den :User Parameter und eine Zahl im :days_ago Parameter ein.

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

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

Änderungen der Berechtigungen für alle sicherbaren Objekte anzeigen

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,
  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"] = "<oauth2-app-client-id>"
GROUP BY
  event_date,
  workspace_id,
  user_email,
  username

Ersetzen Sie <oauth2-app-client-id> durch den Wert der OAuth2-App-Client-ID für den Dienstprinzipal, der einer bestimmten Databricks-App zugewiesen ist. Dieser Wert finden Sie in den Administratoreinstellungen für den Databricks-Arbeitsbereich, in dem die App gehostet wird, oder in der Registerkarte "Autorisierung ", wenn Sie die Details für eine App anzeigen.

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

Welche sind die zuletzt erstellten Databricks-Apps?

Diese Abfrage gibt App-Erstellungsereignisse zurück, einschließlich des Namens, des Erstellers und des Erstellungsdatums der App, sortiert nach dem Zeitstempel des Erstellungsereignisses.

SELECT
  event_time,
  user_identity.email AS email,
  action_name,
  get_json_object(request_params.app, '$.name') AS app_name
FROM
  system.access.audit
WHERE
  action_name == "createApp"
ORDER BY
  event_time DESC

Was sind die neuesten Aktionen eines Databricks Apps-Benutzers?

Diese Abfrage gibt die letzten Aktionen eines Benutzers von Databricks Apps zurück, sortiert nach dem Zeitstempel des Ereignisses.

SELECT
  event_time,
  user_identity.email AS email,
  service_name,
  action_name
FROM
  system.access.audit
WHERE
  service_name = 'apps'
AND
  user_identity.email = '<user-email>'
ORDER BY
  event_time DESC