Udostępnij za pośrednictwem


Odniesienie do tabeli systemu dziennika audytu

Ważne

Ta tabela systemowa znajduje się w publicznej wersji próbnej . Aby uzyskać dostęp do tabeli, schemat musi być włączony w katalogu system. Aby uzyskać więcej informacji, zobacz Włączanie schematów tabel systemowych.

W tym artykule opisano schemat tabeli dziennika inspekcji i zawiera przykładowe zapytania, których można użyć z tabelą systemu dzienników inspekcji, aby odpowiedzieć na typowe pytania dotyczące użycia konta. Aby uzyskać informacje na temat zdarzeń dziennika inspekcji, zobacz Dokumentacja dziennika diagnostycznego.

ścieżka tabeli: ta tabela systemowa znajduje się w system.access.audit.

Zagadnienia dotyczące dziennika inspekcji

  • Większość dzienników inspekcji jest dostępna tylko w regionie obszaru roboczego.
  • Rekord workspace_id dzienników inspekcji na poziomie konta jako 0.

Schemat tabeli systemu dzienników inspekcji

Tabela systemu dzienników inspekcji używa następującego schematu:

Nazwa kolumny Typ danych opis Przykład
version string Wersja schematu dziennika inspekcji 2.0
event_time timestamp Sygnatura czasowa zdarzenia. Informacje o strefie czasowej są rejestrowane na końcu wartości z +00:00 reprezentującą strefę czasową UTC. 2023-01-01T01:01:01.123+00:00
event_date data Data kalendarza, w ramach których miała miejsce akcja 2023-01-01
workspace_id długi Identyfikator obszaru roboczego 1234567890123456
source_ip_address string Adres IP, na którym pochodzi żądanie 10.30.0.242
user_agent string Pochodzenie żądania Apache-HttpClient/4.5.13 (Java/1.8.0_345)
session_id string Identyfikator sesji, z której pochodzi żądanie 123456789
user_identity string Tożsamość żądania inicjującego użytkownika {"email": "user@domain.com",
"subjectName": null}
service_name string Żądanie inicjowania nazwy usługi unityCatalog
action_name string Kategoria zdarzenia przechwyconego w dzienniku inspekcji getTable
request_id string Identyfikator żądania ServiceMain-4529754264
request_params map Mapa wartości klucza zawierających wszystkie parametry żądania. Zależy od typu żądania [["full_name_arg", "user.chat.messages"],
["workspace_id", "123456789"],
["metastore_id", "123456789"]]
response struktura Struktura zwracanych wartości odpowiedzi {"statusCode": 200, "errorMessage": null,
"result": null}
audit_level string Zdarzenie na poziomie obszaru roboczego lub konta ACCOUNT_LEVEL
account_id string Identyfikator konta 23e22ba4-87b9-4cc2-9770-d10b894bxx
event_id string Identyfikator zdarzenia 34ac703c772f3549dcc8671f654950f0
identity_metadata struktura Tożsamości zaangażowane w akcję, w tym run_by i run_as. Zobacz Grupę audytu dedykowanej działalności obliczeniowej. {run_by: example@email.com;
run_as: example@email.com;

Przykładowe zapytania

Poniższe sekcje zawierają przykładowe zapytania SQL, których można użyć, aby uzyskać wgląd w tabelę systemu dzienników inspekcji.

Uwaga

Niektóre przykłady obejmują pełne zdarzenia dziennika inspekcji, które nie są domyślnie włączone. Aby włączyć pełne dzienniki inspekcji w obszarze roboczym, zobacz Włączanie pełnych dzienników inspekcji.

Ten artykuł zawiera następujące przykładowe zapytania:

Kto może uzyskać dostęp do tej tabeli?

To zapytanie używa information_schema do określenia, którzy użytkownicy mają uprawnienia do tabeli. Wprowadź wartości parametrów katalogu, schematu i nazwy tabeli.

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

Którzy użytkownicy uzyskiwali dostęp do tabeli w ciągu ostatnich siedmiu dni?

Aby to zapytanie działało, wprowadź informacje o ścieżce tabeli w parametrach zapytania.

Uwaga

Pełne nazwy nie są przechwytywane w dzienniku dla operacji DML. Uwzględnij schemat i prostą nazwę, aby objąć wszystko.

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

Do których tabel użytkownik ostatnio miał dostęp?

Aby to zapytanie działało, wprowadź adres e-mail użytkownika w parametrze :User i liczbę w parametrze :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

Przykładowy wynik

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

Wyświetlanie zmian uprawnień dla wszystkich zabezpieczanych obiektów

To zapytanie zwróci zdarzenie dla każdej zmiany uprawnień, która wystąpiła na Twoim koncie. Zapytanie zwróci użytkownika, który dokonał zmiany, zabezpieczanego typu obiektu i nazwy oraz określonych zmian, które zostały wprowadzone.

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

Wyświetlanie ostatnio uruchomionych poleceń notesu

To zapytanie zwraca ostatnio uruchamiane polecenia notesu i użytkownik, który uruchomił polecenie.

Uwaga

Akcja runCommand jest emitowana tylko po włączeniu pełnych dzienników inspekcji. Aby włączyć pełne dzienniki inspekcji, zobacz Włączanie pełnych dzienników inspekcji.

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

Którzy użytkownicy zalogowali się do aplikacji usługi Databricks?

To zapytanie zwraca zdarzenie dla każdego logowania do wystąpienia aplikacji usługi 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

Zastąp {{application-ID}} ciąg wartością Identyfikator aplikacji dla jednostki usługi przypisanej do określonej aplikacji usługi Databricks. Tę wartość można znaleźć w ustawieniach administratora obszaru roboczego usługi Databricks hostowania aplikacji.

Które aplikacje usługi Databricks zostały zaktualizowane, aby zmienić sposób udostępniania aplikacji innym użytkownikom lub grupom?

To zapytanie zwraca zdarzenia dotyczące aktualizacji uprawnień w celu zmiany dostępu do aplikacji usługi Databricks, w tym typu uprawnień, użytkownika lub grupy, do której przypisano nowe uprawnienie, oraz użytkownika, który przesłał zmianę.

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