Отслеживание действий базы данных с помощью журналов аудита в База данных 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 символов. Например, подстановочное значениеdev*
включает всех пользователей с записями, начиная с ключевого словаdev
"dev1,dev_user,dev_2". Другой пример для записи подстановочного знака для включения пользователя в этот пример,*dev
все пользователи, заканчивающиеся значением dev, например "stage_dev,prod_dev,user_dev", включаются в записи журнала аудита. Кроме того, использование подстановочного знака в качестве подстановочного знака(?)
допускается в шаблонах.audit_log_exclude_users
: пользователи MySQL, которых следует исключить из ведения журнала. Максимальная длина параметра составляет 512 символов. Записи с подстановочными знаками для пользователя также принимаются для исключения пользователей в журналах аудита. Например, подстановочный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 , , DISCONNECT CHANGE USER |
connection_id_d |
Уникальный идентификатор подключения, созданный MySQL |
host_s |
Пробел |
ip_s |
IP-адрес клиента, подключающегося к MySQL |
user_s |
Имя пользователя, выполняющего запрос |
db_s |
Имя базы данных, к которой выполняется подключение |
\_ResourceId |
Универсальный код ресурса (URI) |
status_d |
Запись кода ошибки подключения для события 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