Отслеживание действий базы данных с помощью журналов аудита в База данных Azure для MySQL — гибкий сервер

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

База данных Azure для MySQL гибкий сервер предоставляет пользователям возможность настраивать журналы аудита. Журналы аудита могут использоваться для наблюдения за действиями уровня базы данных, включая события подключения, администрирования, DDL и DML. Эти типы журналов обычно используются для обеспечения соответствия требованиям.

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

Внимание

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

По умолчанию журналы аудита отключены. Чтобы включить их, установите для параметра сервера audit_log_enabled значение ВКЛ. Это можно настроить с помощью портал Azure или Azure CLI.

Другие параметры, которые можно настроить для управления ведением журнала аудита:

  • audit_log_events: определяет регистрируемые события. Конкретные события аудита см. в таблице ниже.
  • audit_log_include_users: пользователи MySQL, которые будут включаться в журнал. По умолчанию значение этого параметра пусто, при этом в журнал будут включаться все пользователи. Этот параметр имеет более высокий приоритет, чем audit_log_exclude_users. Максимальная длина параметра — 512 символов. Например, значение wild карта dev* включает всех пользователей с записями, начиная с ключевое словоdev, например "dev1,dev_user,dev_2". Другой пример для записи дикого карта для включения пользователя в *dev этот пример, все пользователи, заканчивающиеся значением dev, например "stage_dev,prod_dev,user_dev", включаются в записи журнала аудита. Кроме того, в шаблонах разрешено использовать вопросительный знак (?) в качестве дикого карта символа.
  • audit_log_exclude_users: пользователи MySQL, которых следует исключить из ведения журнала. Максимальная длина параметра составляет 512 символов. Записи wild карта для пользователя также принимаются для исключения пользователей в журналах аудита. Например, значение wild карта stage* исключает всех пользователей с записями, начиная с ключевое словоstage, таких как "stage1,stage_user,stage_2". Другой пример для дикого карта записи для исключения пользователя в *com этом примере, все пользователи, заканчивающиеся значениемcom, будут исключены из записей журнала аудита. Кроме того, в шаблонах разрешено использовать вопросительный знак (?) в качестве дикого карта символа.

Примечание.

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

Событие Description
CONNECTION — запуск Подключение
— Завершение подключения
CONNECTION_V2 — Подключение инициирование (код ошибки успешной или неудачной попытки)
— Завершение подключения
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 — Инструкции чтения таблиц, такие как SELECT или INSERT INTO ... SELECT
— Инструкции удаления таблиц, такие как DELETE или TRUNCATE TABLE
— Инструкции вставки таблиц, такие как INSERT или REPLACE
— Инструкции обновления таблиц, такие как UPDATE

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

Журналы аудита можно интегрировать с настройками диагностики Azure Monitor. После включения журналов аудита на гибком сервере их можно отправить в журналы Azure Monitor, Центры событий Azure или служба хранилища 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, , DISCONNECTCHANGE USER
connection_id_d Уникальный идентификатор подключения, созданный MySQL
host_s Пробел
ip_s IP-адрес клиента, подключающегося к MySQL
user_s Имя пользователя, выполняющего запрос
db_s Имя базы данных, к которой выполняется подключение
\_ResourceId Универсальный код ресурса (URI)
status_d Подключение ion Запись кода ошибки для события CONNECTIONS_V2.

Общие

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

Примечание.

Для sql_text_s журнал будет обрезан, если его длина превышает 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)

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

Примечание.

Для sql_text_s журнал будет обрезан, если его длина превышает 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 Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_class_s == "general_log"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | order by TimeGenerated asc nulls last
    
  • Вывод списка событий CONNECTION_V2 на определенном сервереstatus_d, столбец обозначает код ошибки подключения клиента, с которым сталкивается клиентское приложение при подключении.

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_subclass_s == "CONNECT"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, user_s, ip_s, status_d
    | order by TimeGenerated asc nulls last
    
  • Вывод списка событий CONNECTION на конкретном сервере

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

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, Resource, 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 Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | summarize count() by Resource, bin(TimeGenerated, 5m)
    | render timechart
    
  • Вывод списка событий аудита во всех База данных Azure для MySQL гибких экземплярах сервера с включенными журналами диагностики для журналов аудита

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

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