Поделиться через


Справочник по системе аудита

Внимание

Эта системная таблица находится в общедоступной предварительной версии . Чтобы получить доступ к таблице, схема должна быть включена в каталоге system. Дополнительные сведения см. в разделе Включение системных схем таблиц.

В этой статье описана схема таблицы журнала аудита и приведены примеры запросов, которые можно использовать с таблицей системы журнала аудита для ответа на распространенные вопросы о действиях учетной записи. Сведения о событиях журнала аудита см . в справочнике по журналу диагностики.

пути к таблице: эта системная таблица находится в system.access.audit.

Рекомендации по журналам аудита

  • Большинство журналов аудита доступны только в регионе рабочей области.
  • Запись журналов аудита на уровне учетной записи workspace_id0.

Схема таблицы системы журнала аудита

В таблице системы журнала аудита используется следующая схема:

Имя столбца Тип данных Description Пример
version строка Версия схемы журнала аудита 2.0
event_time TIMESTAMP Метка времени события. Сведения о часовом поясе записываются в конце значения с +00:00, представляющей часовой пояс UTC. 2023-01-01T01:01:01.123+00:00
event_date Дата Дата выполнения действия календаря 2023-01-01
workspace_id длинный Идентификатор рабочей области 1234567890123456
source_ip_address строка IP-адрес, в котором возникл запрос 10.30.0.242
user_agent строка Происхождение запроса Apache-HttpClient/4.5.13 (Java/1.8.0_345)
session_id строка Идентификатор сеанса, из которого поступил запрос 123456789
user_identity строка Удостоверение запроса на инициирование пользователем {"email": "user@domain.com",
"subjectName": null}
service_name строка Запрос на инициирование имени службы unityCatalog
action_name строка Категория события, записанного в журнале аудита getTable
request_id строка Идентификатор запроса ServiceMain-4529754264
request_params map Карта ключевых значений, содержащих все параметры запроса. Зависит от типа запроса [["full_name_arg", "user.chat.messages"],
["workspace_id", "123456789"],
["metastore_id", "123456789"]]
response struct Структура возвращаемых значений ответа {"statusCode": 200, "errorMessage": null,
"result": null}
audit_level строка Событие уровня рабочей области или учетной записи ACCOUNT_LEVEL
account_id строка Идентификатор учетной записи 23e22ba4-87b9-4cc2-9770-d10b894bxx
event_id строка Идентификатор события 34ac703c772f3549dcc8671f654950f0
identity_metadata struct Личности, участвующие в действии, включая run_by и run_as. См. группе аудита, посвященной вычислительной деятельности. {run_by: example@email.com;
run_as: example@email.com;

Примеры запросов

В следующих разделах приведены примеры запросов SQL, которые можно использовать для получения аналитических сведений о системной таблице журналов аудита.

Примечание.

Некоторые примеры включают подробные события журнала аудита, которые по умолчанию не включены. Подробные журналы аудита в рабочей области см. в разделе "Включение подробных журналов аудита".

В этой статье приведены следующие примеры запросов:

Кто может получить доступ к этой таблице?

Этот запрос использует information_schema, чтобы определить, какие пользователи имеют разрешения на таблицу. Введите значения параметров каталога, схемы и имени таблицы.

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

Какие пользователи обращаются к таблице за последние семь дней?

Для работы этого запроса введите сведения о пути таблицы в параметрах запроса.

Примечание.

Полные имена не записываются в журнале для операций DML. Включите схему и простое имя для записи всех.

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

К каким таблицам пользователь обращался недавно?

Чтобы этот запрос работал, введите сообщение электронной почты пользователя в параметре :User и число в параметре :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

Пример результата

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

Просмотр изменений разрешений для всех защищаемых объектов

Этот запрос возвращает событие для каждого изменения разрешений, которое произошло в вашей учетной записи. Запрос вернет пользователю, который внес изменения, тип защищаемого объекта и имя, а также определенные изменения, внесенные.

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

Просмотр последних команд записной книжки

Этот запрос возвращает последние команды записной книжки и пользователя, выполнившего команду.

Примечание.

Действие runCommand создается только при включении подробных журналов аудита. Подробные журналы аудита см. в разделе "Включение подробных журналов аудита".

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

Какие пользователи вошли в приложение Databricks?

Этот запрос возвращает событие для каждого входа в экземпляр приложения 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

Замените {{application-ID}} значение идентификатора приложения для субъекта-службы, назначенного конкретному приложению Databricks. Это значение можно найти в параметрах администратора для рабочей области Databricks, в котором размещено приложение.

Какие приложения Databricks были обновлены, чтобы изменить способ совместного использования приложения с другими пользователями или группами?

Этот запрос возвращает события для обновлений разрешений для изменения доступа к приложениям Databricks, включая тип разрешения, пользователя или группу, которому назначено новое разрешение, и пользователя, отправившего изменение.

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