Журналы аудита в Базе данных Azure для MySQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для MySQL — отдельный сервер

Важно!

База данных Azure для MySQL один сервер находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить обновление до База данных Azure для MySQL гибкого сервера. Дополнительные сведения о миграции на гибкий сервер База данных Azure для MySQL см. в статье "Что происходит с одним сервером База данных Azure для MySQL?"

В Базе данных Azure для MySQL пользователям доступен журнал аудита. Журнал аудита можно использовать для отслеживания действий на уровне базы данных и для обеспечения соответствия требованиям.

Настройка ведения журналов аудита

Важно!

Рекомендуется регистрировать только типы событий и сведения о пользователях, необходимые для аудита, чтобы влияние на производительность сервера было незначительным, а объем собранных данных минимальным.

Журнал аудита по умолчанию отключен. Чтобы включить его, установите для параметра audit_log_enabled значение "ВКЛ.".

Вы можете настроить еще несколько параметров.

  • audit_log_events: определяет регистрируемые события. Конкретные события аудита см. в таблице ниже.
  • audit_log_include_users: пользователи MySQL, которые будут включаться в журнал. По умолчанию значение этого параметра пусто, при этом в журнал будут включаться все пользователи. Этот параметр имеет более высокий приоритет, чем audit_log_exclude_users. Максимальная длина параметра — 512 символов.
  • audit_log_exclude_users: пользователи MySQL, которых следует исключить из ведения журнала. Максимальная длина параметра — 512 символов.

Примечание.

audit_log_include_users имеет более высокий приоритет, чем audit_log_exclude_users. Например, если заданы параметры audit_log_include_users = demouser и audit_log_exclude_users = demouser, пользователь будет включаться в журналы аудита, так как параметр audit_log_include_users имеет более высокий приоритет.

Событие Description
CONNECTION — Подключение инициирование (успешное или неудачное)
— повторная проверка подлинности пользователей с другим пользователем или паролем во время сеанса
— Завершение подключения
DML_SELECT Запросы SELECT
DML_NONSELECT Запросы INSERT/DELETE/UPDATE
DML DML = DML_SELECT + DML_NONSELECT
DDL Запросы типа DROP DATABASE
DCL Запросы типа GRANT PERMISSION
ADMIN Запросы типа SHOW STATUS
GENERAL Все в DML_SELECT, DML_NONSELECT, DML, DDL, DCL и ADMIN
TABLE_ACCESS — доступно для MySQL 5.7 и MySQL 8.0
— Инструкции чтения таблиц, такие как SELECT или INSERT INTO ... ВЫБЕРИТЕ
— Инструкции удаления таблицы, такие как DELETE или TRUNCATE TABLE
— инструкции вставки таблицы, такие как INSERT или REPLACE
— Инструкции обновления таблиц, такие как UPDATE

Доступ к журналам аудита

Журналы аудита можно интегрировать с журналами диагностики Azure Monitor. Включив ведение журналов аудита на сервере MySQL, можете реализовать их отправку этих данных в журналы Azure Monitor, Центры событий или службу хранилища Azure. Дополнительные сведения о включение журналов диагностики на портале Azure см. в статье о портале журналов аудита.

Примечание.

Учетные записи хранилище класса Premium не поддерживаются при отправке журналов в хранилище Azure с помощью диагностики и параметров.

Схемы журналов диагностики

В следующих разделах описаны выходные данные журналов аудита MySQL по типам событий. Порядок появления выбранных полей зависит от выбранного метода вывода.

Connection

Свойство Description
TenantId Идентификатор клиента
SourceSystem Azure
TimeGenerated [UTC] Метка времени, когда журнал был записан в формате UTC
Type Тип журнала Всегда AzureDiagnostics
SubscriptionId Идентификатор GUID для подписки, принадлежащей серверу
ResourceGroup Имя группы ресурсов, принадлежащей серверу
ResourceProvider Имя поставщика ресурсов. Всегда MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId Универсальный код ресурса (URI)
Resource Имя сервера
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s Имя сервера
event_class_s connection_log
event_subclass_s CONNECT, DISCONNECT, CHANGE USER (доступно только для MySQL 5.7)
connection_id_d Уникальный идентификатор подключения, созданный MySQL
host_s Чистого листа
ip_s IP-адрес клиента, подключающегося к MySQL
user_s Имя пользователя, выполняющего запрос
db_s Имя базы данных, к которой выполняется подключение
\_ResourceId Универсальный код ресурса (URI)

Общие

Схема ниже относится к событиям типов GENERAL, DML_SELECT, DML_NONSELECT, DML, DDL, DCL и ADMIN.

Примечание.

Для sql_text журнал будет обрезан, если его длина превышает 2048 символов.

Свойство Description
TenantId Идентификатор клиента
SourceSystem Azure
TimeGenerated [UTC] Метка времени, когда журнал был записан в формате UTC
Type Тип журнала Всегда AzureDiagnostics
SubscriptionId Идентификатор GUID для подписки, принадлежащей серверу
ResourceGroup Имя группы ресурсов, принадлежащей серверу
ResourceProvider Имя поставщика ресурсов. Всегда MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId Универсальный код ресурса (URI)
Resource Имя сервера
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s Имя сервера
event_class_s general_log
event_subclass_s LOG, ERROR, RESULT (доступно только для MySQL 5.6)
event_time Время начала запроса в формате UTC (метка времени)
error_code_d Код ошибки при сбое запроса. 0 означает отсутствие ошибок.
thread_id_d Идентификатор потока, выполнившего запрос
host_s Чистого листа
ip_s IP-адрес клиента, подключающегося к MySQL
user_s Имя пользователя, выполняющего запрос
sql_text_s Полный текст запроса
\_ResourceId Универсальный код ресурса (URI)

Доступ к таблицам

Примечание.

Журналы доступа к таблицам выводятся только для MySQL 5.7.
Для sql_text журнал будет обрезан, если его длина превышает 2048 символов.

Свойство Description
TenantId Идентификатор клиента
SourceSystem Azure
TimeGenerated [UTC] Метка времени, когда журнал был записан в формате UTC
Type Тип журнала Всегда AzureDiagnostics
SubscriptionId Идентификатор GUID для подписки, принадлежащей серверу
ResourceGroup Имя группы ресурсов, принадлежащей серверу
ResourceProvider Имя поставщика ресурсов. Всегда MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId Универсальный код ресурса (URI)
Resource Имя сервера
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s Имя сервера
event_class_s table_access_log
event_subclass_s READ, INSERT, UPDATE или DELETE
connection_id_d Уникальный идентификатор подключения, созданный MySQL
db_s Имя базы данных, к которой осуществляется доступ
table_s Имя таблицы, к которой осуществляется доступ
sql_text_s Полный текст запроса
\_ResourceId Универсальный код ресурса (URI)

Анализ журналов в журналах Azure Monitor

После передачи журналов аудита в журналы Azure Monitor с помощью журналов диагностики вы можете провести дальнейший анализ событий, для которых выполняется аудит. Ниже приведены примеры запросов, которые помогут приступить к работе. Обязательно замените указанные ниже имена серверов именем своего сервера.

  • Вывод списка событий GENERAL на конкретном сервере

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlAuditLogs' and event_class_s == "general_log"
    | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s 
    | order by TimeGenerated asc nulls last 
    
  • Вывод списка событий CONNECTION на конкретном сервере

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlAuditLogs' and event_class_s == "connection_log"
    | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s 
    | order by TimeGenerated asc nulls last
    
  • Вывод сводки событий, для которых проводится аудит, на конкретном сервере

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s 
    | summarize count() by event_class_s, event_subclass_s, user_s, ip_s
    
  • Построение диаграммы распределения типов событий, для которых проводится аудит, на конкретном сервере

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s 
    | summarize count() by LogicalServerName_s, bin(TimeGenerated, 5m)
    | render timechart 
    
  • Вывод списка событий, для которых проводится аудит, на всех серверах MySQL с журналами диагностики, поддерживающих журналы аудита

    AzureDiagnostics
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s 
    | order by TimeGenerated asc nulls last
    

Следующие шаги