Справочник по системе аудита
Внимание
Эта системная таблица находится в общедоступной предварительной версии. Чтобы получить доступ к таблице, в каталоге должна быть включена system
схема. Дополнительные сведения см. в разделе "Включение схем системной таблицы".
В этой статье описывается схема таблицы журнала аудита и есть примеры запросов, которые можно использовать с таблицей системы журнала аудита для ответа на распространенные вопросы об использовании учетных записей. Сведения о событиях журнала аудита см . в справочнике по журналу диагностики.
Путь к таблице: эта системная таблица расположена по адресу system.access.audit
.
Рекомендации по журналам аудита
- Большинство журналов аудита доступны только в регионе рабочей области.
- Запись журналов аудита на уровне учетной записи
workspace_id
0
.
Схема таблицы системы журнала аудита
В таблице системы журнала аудита используется следующая схема:
Имя столбца | Тип данных | 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; |
Примеры запросов
В следующих разделах приведены примеры запросов, которые можно использовать для получения аналитических сведений о системной таблице журналов аудита. Чтобы эти запросы работали, замените значения в фигурных скобках {{}}
своими параметрами.
Примечание.
Некоторые примеры включают подробные события журнала аудита, которые по умолчанию не включены. Подробные журналы аудита в рабочей области см. в разделе "Включение подробных журналов аудита".
В этой статье приведены следующие примеры запросов:
- Кто может получить доступ к этой таблице?
- Какие пользователи обращаются к таблице за последний день?
- К каким таблицам был доступ пользователя?
- Просмотр изменений разрешений для всех защищаемых объектов
- Просмотр последних команд записной книжки
- Какие пользователи вошли в приложение Databricks?
- Какие приложения Databricks были обновлены, чтобы изменить способ совместного использования приложения с другими пользователями или группами?
Кто может получить доступ к этой таблице?
Этот запрос используется information_schema
для определения разрешений пользователей в таблице.
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}}'
Какие пользователи обращаются к таблице за последний день?
Примечание.
Полные имена не записываются в журнале для операций 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 = '{{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
К каким таблицам был доступ пользователя?
Примечание.
Чтобы отфильтровать диапазон дат, раскомментируйте предложение даты в нижней части запроса.
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
Пример результата
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