8.4.5.4 Форматы файлов журнала аудита
Сервер MySQL вызывает плагин журнала аудита для записи записи аудита в свой файл журнала всякий раз, когда происходит аудируемое событие. Обычно первая запись аудита, записанная после запуска плагина, содержит описание сервера и параметры запуска. Элементы, следующие за ним, представляют события, такие как подключение и отключение клиентов, выполняемые SQL-запросы и т. д. Записываются только операторы верхнего уровня, а не операторы внутри хранимых программ, таких как триггеры или хранимые процедуры. Содержимое файлов, на которые ссылаются операторы, такие как LOAD
DATA, не регистрируется.
Чтобы выбрать формат журнала, который использует плагин журнала аудита для записи своего файла журнала, установите системную переменную audit_log_format при запуске сервера. Доступны следующие форматы:
Формат XML нового стиля (
audit_log_format=NEW): Формат XML, который имеет лучшую совместимость с Oracle Audit Vault, чем формат XML старого стиля. MySQL 9.2 по умолчанию использует формат XML нового стиля.Формат XML старого стиля (
audit_log_format=OLD): Исходный формат журнала аудита, используемый по умолчанию в более ранних версиях MySQL.Формат JSON (
audit_log_format=JSON): Записывает журнал аудита в виде массива JSON. Только этот формат поддерживает необязательные статистику времени выполнения запроса и размер.
По умолчанию содержимое файла журнала аудита записывается в формате XML нового стиля без сжатия или шифрования.
Если вы измените audit_log_format, рекомендуется также изменить audit_log_file. Например, если вы установите audit_log_format на JSON, установите audit_log_file на audit.json. В противном случае более новые файлы журналов будут иметь другой формат, чем более старые файлы, но все они будут иметь одно и то же базовое имя без каких-либо индикаторов, когда изменился формат.
Формат файла журнала аудита XML нового стиля
Вот пример файла журнала в формате XML нового стиля (audit_log_format=NEW), слегка переформатированный для лучшей читаемости:
<?xml version="1.0" encoding="utf-8"?>
<AUDIT>
<AUDIT_RECORD>
<TIMESTAMP>2019-10-03T14:06:33 UTC</TIMESTAMP>
<RECORD_ID>1_2019-10-03T14:06:33</RECORD_ID>
<NAME>Audit</NAME>
<SERVER_ID>1</SERVER_ID>
<VERSION>1</VERSION>
<STARTUP_OPTIONS>/usr/local/mysql/bin/mysqld
--socket=/usr/local/mysql/mysql.sock
--port=3306</STARTUP_OPTIONS>
<OS_VERSION>i686-Linux</OS_VERSION>
<MYSQL_VERSION>5.7.21-log</MYSQL_VERSION>
</AUDIT_RECORD>
<AUDIT_RECORD>
<TIMESTAMP>2019-10-03T14:09:38 UTC</TIMESTAMP>
<RECORD_ID>2_2019-10-03T14:06:33</RECORD_ID>
<NAME>Connect</NAME>
<CONNECTION_ID>5</CONNECTION_ID>
<STATUS>0</STATUS>
<STATUS_CODE>0</STATUS_CODE>
<USER>root</USER>
<OS_LOGIN/>
<HOST>localhost</HOST>
<IP>127.0.0.1</IP>
<COMMAND_CLASS>connect</COMMAND_CLASS>
<CONNECTION_TYPE>SSL/TLS</CONNECTION_TYPE>
<CONNECTION_ATTRIBUTES>
<ATTRIBUTE>
<NAME>_pid</NAME>
<VALUE>42794</VALUE>
</ATTRIBUTE>
...
<ATTRIBUTE>
<NAME>program_name</NAME>
<VALUE>mysqladmin</VALUE>
</ATTRIBUTE>
</CONNECTION_ATTRIBUTES>
<PRIV_USER>root</PRIV_USER>
<PROXY_USER/>
<DB>test</DB>
</AUDIT_RECORD>
...
<AUDIT_RECORD>
<TIMESTAMP>2019-10-03T14:09:38 UTC</TIMESTAMP>
<RECORD_ID>6_2019-10-03T14:06:33</RECORD_ID>
<NAME>Query</NAME>
<CONNECTION_ID>5</CONNECTION_ID>
<STATUS>0</STATUS>
<STATUS_CODE>0</STATUS_CODE>
<USER>root[root] @ localhost [127.0.0.1]</USER>
<OS_LOGIN/>
<HOST>localhost</HOST>
<IP>127.0.0.1</IP>
<COMMAND_CLASS>drop_table</COMMAND_CLASS>
<SQLTEXT>DROP TABLE IF EXISTS t</SQLTEXT>
</AUDIT_RECORD>
...
<AUDIT_RECORD>
<TIMESTAMP>2019-10-03T14:09:39 UTC</TIMESTAMP>
<RECORD_ID>8_2019-10-03T14:06:33</RECORD_ID>
<NAME>Quit</NAME>
<CONNECTION_ID>5</CONNECTION_ID>
<STATUS>0</STATUS>
<STATUS_CODE>0</STATUS_CODE>
<USER>root</USER>
<OS_LOGIN/>
<HOST>localhost</HOST>
<IP>127.0.0.1</IP>
<COMMAND_CLASS>connect</COMMAND_CLASS>
<CONNECTION_TYPE>SSL/TLS</CONNECTION_TYPE>
</AUDIT_RECORD>
...
<AUDIT_RECORD>
<TIMESTAMP>2019-10-03T14:09:43 UTC</TIMESTAMP>
<RECORD_ID>11_2019-10-03T14:06:33</RECORD_ID>
<NAME>Quit</NAME>
<CONNECTION_ID>6</CONNECTION_ID>
<STATUS>0</STATUS>
<STATUS_CODE>0</STATUS_CODE>
<USER>root</USER>
<OS_LOGIN/>
<HOST>localhost</HOST>
<IP>127.0.0.1</IP>
<COMMAND_CLASS>connect</COMMAND_CLASS>
<CONNECTION_TYPE>SSL/TLS</CONNECTION_TYPE>
</AUDIT_RECORD>
<AUDIT_RECORD>
<TIMESTAMP>2019-10-03T14:09:45 UTC</TIMESTAMP>
<RECORD_ID>12_2019-10-03T14:06:33</RECORD_ID>
<NAME>NoAudit</NAME>
<SERVER_ID>1</SERVER_ID>
</AUDIT_RECORD>
</AUDIT>
Файл журнала аудита записывается в формате XML с использованием кодировки UTF-8 (до 4 байт на символ). Корневой элемент — <AUDIT>. Корневой элемент содержит элементы <AUDIT_RECORD>, каждый из которых содержит информацию об аудируемом событии. Когда плагин журнала аудита начинает запись нового файла журнала, он записывает декларацию XML и открывающий тег корневого элемента <AUDIT>. Когда плагин закрывает файл журнала, он записывает закрывающий тег корневого элемента </AUDIT>. Закрывающего тега нет, пока файл открыт.
Элементы внутри элементов <AUDIT_RECORD> имеют следующие характеристики:
Некоторые элементы присутствуют в каждом элементе
<AUDIT_RECORD>. Другие являются необязательными и могут появляться в зависимости от типа записи аудита.Порядок элементов внутри элемента
<AUDIT_RECORD>не гарантируется.Значения элементов не имеют фиксированной длины. Длинные значения могут быть усечены, как указано в описаниях элементов, приведенных ниже.
Символы
<,>,"и&кодируются как<,>,"и&соответственно. Байты NUL (U+00) кодируются как символ?.-
Символы, не являющиеся допустимыми символами XML, кодируются с использованием числовых кодов символов. Допустимые символы XML:
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Следующие элементы являются обязательными в каждом элементе <AUDIT_RECORD>:
-
<NAME>Строка, представляющая тип инструкции, которая сгенерировала событие аудита, например, команда, полученная сервером от клиента.
Пример:
<NAME>Query</NAME>
Некоторые распространенные значения
<NAME>:Audit When auditing starts, which may be server startup time Connect When a client connects, also known as logging in Query An SQL statement (executed directly) Prepare Preparation of an SQL statement; usually followed by Execute Execute Execution of an SQL statement; usually follows Prepare Shutdown Server shutdown Quit When a client disconnects NoAudit Auditing has been turned off
Возможные значения:
Audit,Binlog Dump,Change user,Close stmt,Connect Out,Connect,Create DB,Daemon,Debug,Delayed insert,Drop DB,Execute,Fetch,Field List,Init DB,Kill,Long Data,NoAudit,Ping,Prepare,Processlist,Query,Quit,Refresh,Register Slave,Reset stmt,Set option,Shutdown,Sleep,Statistics,Table Dump,TableDelete,TableInsert,TableRead,TableUpdate,Time.Многие из этих значений соответствуют значениям команд
COM_, перечисленным в заголовочном файлеxxxmy_command.h. Например,Create DBиChange userсоответствуютCOM_CREATE_DBиCOM_CHANGE_USERсоответственно.События со значениями
<NAME>Tableсопровождают событияXXXQuery. Например, следующее утверждение генерирует одно событиеQuery, два событияTableReadи событиеTableInsert:INSERT INTO t3 SELECT t1.* FROM t1 JOIN t2;
Каждое событие
Tableсодержит элементыXXX<TABLE>и<DB>для идентификации таблицы, к которой относится событие, и базы данных, в которой находится таблица. -
<RECORD_ID>Уникальный идентификатор записи аудита. Значение состоит из порядкового номера и метки времени в формате
. Когда плагин журнала аудита открывает файл журнала аудита, он инициализирует порядковый номер размером файла журнала аудита, затем увеличивает порядковый номер на 1 для каждой записанной записи. Метка времени — это значение UTC в форматеSEQ_TIMESTAMP, обозначающее дату и время открытия файла плагином журнала аудита.YYYY-MM-DDThh:mm:ssПример:
<RECORD_ID>12_2019-10-03T14:06:33</RECORD_ID>
-
<TIMESTAMP>Строка, представляющая значение UTC в формате
, обозначающая дату и время генерации события аудита. Например, событие, соответствующее выполнению SQL-запроса, полученного от клиента, имеет значениеYYYY-MM-DDThh:mm:ssUTC<TIMESTAMP>, возникающее после завершения запроса, а не при его получении.Пример:
<TIMESTAMP>2019-10-03T14:09:45 UTC</TIMESTAMP>
Следующие элементы являются необязательными в элементах <AUDIT_RECORD>. Многие из них появляются только со специфическими значениями элементов <NAME>.
-
<COMMAND_CLASS>Строка, указывающая тип выполненного действия.
Пример:
<COMMAND_CLASS>drop_table</COMMAND_CLASS>
Значения соответствуют счётчикам команд
statement/sql/. Например,xxxxxxсоответствуетdrop_tableиselectдля операторовDROP TABLEиSELECTсоответственно. Следующее утверждение отображает возможные имена:SELECT REPLACE(EVENT_NAME, 'statement/sql/', '') AS name FROM performance_schema.events_statements_summary_global_by_event_name WHERE EVENT_NAME LIKE 'statement/sql/%' ORDER BY name;
-
<CONNECTION_ATTRIBUTES>События со значением
<COMMAND_CLASS>равнымconnectмогут включать элемент<CONNECTION_ATTRIBUTES>для отображения атрибутов подключения, переданных клиентом во время подключения. (Дополнительную информацию об этих атрибутах, которые также доступны в таблицах Performance Schema, см. в разделе 29.12.9, «Таблицы атрибутов подключения Performance Schema».)Элемент
<CONNECTION_ATTRIBUTES>содержит по одному элементу<ATTRIBUTE>на атрибут, каждый из которых содержит элементы<NAME>и<VALUE>для указания имени и значения атрибута соответственно.Пример:
<CONNECTION_ATTRIBUTES> <ATTRIBUTE> <NAME>_pid</NAME> <VALUE>42794</VALUE> </ATTRIBUTE> <ATTRIBUTE> <NAME>_os</NAME> <VALUE>macos0.14</VALUE> </ATTRIBUTE> <ATTRIBUTE> <NAME>_platform</NAME> <VALUE>x86_64</VALUE> </ATTRIBUTE> <ATTRIBUTE> <NAME>_client_version</NAME> <VALUE>8.4.0</VALUE> </ATTRIBUTE> <ATTRIBUTE> <NAME>_client_name</NAME> <VALUE>libmysql</VALUE> </ATTRIBUTE> <ATTRIBUTE> <NAME>program_name</NAME> <VALUE>mysqladmin</VALUE> </ATTRIBUTE> </CONNECTION_ATTRIBUTES>
Если в событии нет атрибутов подключения, они не регистрируются, и элемент
<CONNECTION_ATTRIBUTES>не появляется. Это может произойти, если попытка подключения неуспешна, клиент не передаёт атрибуты или подключение происходит внутренне, например, при запуске сервера или при инициализации плагином. -
<CONNECTION_ID>Беззнаковое целое число, представляющее идентификатор подключения клиента. Это совпадает со значением, возвращаемым функцией
CONNECTION_ID()в сессии.Пример:
<CONNECTION_ID>127</CONNECTION_ID>
-
<CONNECTION_TYPE>Состояние безопасности подключения к серверу. Допустимые значения:
TCP/IP(TCP/IP-соединение установлено без шифрования),SSL/TLS(TCP/IP-соединение установлено с шифрованием),Socket(подключение через файл Unix-сокет),Named Pipe(подключение через именованную Windows-пайп), иShared Memory(подключение через общий Windows-память).Пример:
<CONNECTION_TYPE>SSL/TLS</CONNECTION_TYPE>
-
<DB>Строка, представляющая имя базы данных.
Пример:
<DB>test</DB>
Для событий подключения этот элемент указывает базу данных по умолчанию; элемент пуст, если базы данных по умолчанию нет. Для событий доступа к таблицам этот элемент указывает базу данных, к которой относится доступная таблица.
-
<HOST>Строка, представляющая имя хоста клиента.
Пример:
<HOST>localhost</HOST>
-
<IP>Строка, представляющая IP-адрес клиента.
Пример:
<IP>127.0.0.1</IP>
-
<MYSQL_VERSION>Строка, представляющая версию MySQL-сервера. Это то же самое, что и значение функции
VERSION()или системной переменнойversion.Пример:
<MYSQL_VERSION>5.7.21-log</MYSQL_VERSION>
-
<OS_LOGIN>Строка, представляющая имя внешнего пользователя, используемого во время процесса аутентификации, как задано плагином, используемым для аутентификации клиента. При использовании родной (встроенной) аутентификации MySQL или если плагин не задаёт значение, этот элемент пустой. Значение совпадает со значением системной переменной
external_user(см. раздел 8.2.19, «Пользователи-прокси»).Пример:
<OS_LOGIN>jeffrey</OS_LOGIN>
-
<OS_VERSION>Строка, представляющая операционную систему, на которой был построен или работает сервер.
Пример:
<OS_VERSION>x86_64-Linux</OS_VERSION>
-
<PRIV_USER>Строка, представляющая имя пользователя, под которым сервер выполнил аутентификацию клиента. Это имя пользователя, используемое сервером для проверки привилегий, и может отличаться от значения
<USER>.Пример:
<PRIV_USER>jeffrey</PRIV_USER>
-
<PROXY_USER>Строка, представляющая пользователя-прокси (см. раздел 8.2.19, «Пользователи-прокси»). Значение пустое, если перенаправление пользователя не активна.
Пример:
<PROXY_USER>developer</PROXY_USER>
-
<SERVER_ID>Беззнаковое целое число, представляющее идентификатор сервера. Это совпадает со значением системной переменной
server_id.Пример:
<SERVER_ID>1</SERVER_ID>
-
<SQLTEXT>Строка, представляющая текст SQL-запроса. Значение может быть пустым. Длинные значения могут быть усечены. Строка, подобно самому файлу журнала аудита, написана с использованием UTF-8 (до 4 байт на символ), поэтому значение может быть результатом преобразования. Например, исходный запрос мог быть получен от клиента в виде строки SJIS.
Пример:
<SQLTEXT>DELETE FROM t1</SQLTEXT>
-
<STARTUP_OPTIONS>Строка, представляющая параметры, заданные в командной строке или в файлах параметров при запуске MySQL-сервера. Первый параметр — путь к исполняемому файлу сервера.
Пример:
<STARTUP_OPTIONS>/usr/local/mysql/bin/mysqld --port=3306 --log_output=FILE</STARTUP_OPTIONS>
-
<STATUS>Беззнаковое целое число, представляющее состояние команды: 0 для успеха, ненулевое, если произошла ошибка. Это совпадает со значением функции C API. См. описание для
<STATUS_CODE>для получения информации о том, чем оно отличается от<STATUS>.В журнале аудита не содержится значение SQLSTATE или сообщение об ошибке. Чтобы увидеть связи между кодами ошибок, значениями SQLSTATE и сообщениями, см. .
Предупреждения не регистрируются.
Пример:
<STATUS>1051</STATUS>
-
<STATUS_CODE>Беззнаковое целое число, представляющее состояние команды: 0 для успеха, 1, если произошла ошибка.
Значение
STATUS_CODEотличается от значенияSTATUS:STATUS_CODEравно 0 для успеха и 1 для ошибки, что совместимо с потребителем EZ_collector для Audit Vault.STATUS— значение функции C API. Это 0 для успеха и ненулевое для ошибки, и поэтому не обязательно равно 1 для ошибки.Пример:
<STATUS_CODE>0</STATUS_CODE>
-
<TABLE>Строка, представляющая имя таблицы.
Пример:
<TABLE>t3</TABLE>
-
<USER>Строка, представляющая имя пользователя, отправленное клиентом. Это может отличаться от значения
<PRIV_USER>.Пример:
<USER>root[root] @ localhost [127.0.0.1]</USER>
-
<VERSION>Беззнаковое целое число, представляющее версию формата файла журнала аудита.
Пример:
<VERSION>1</VERSION>
Формат файла журнала аудита XML старого стиля
Вот пример файла журнала в формате XML старого стиля (audit_log_format=OLD), слегка переформатированный для удобства чтения:
<?xml version="1.0" encoding="utf-8"?>
<AUDIT>
<AUDIT_RECORD
TIMESTAMP="2019-10-03T14:25:00 UTC"
RECORD_ID="1_2019-10-03T14:25:00"
NAME="Audit"
SERVER_ID="1"
VERSION="1"
STARTUP_OPTIONS="--port=3306"
OS_VERSION="i686-Linux"
MYSQL_VERSION="5.7.21-log"/>
<AUDIT_RECORD
TIMESTAMP="2019-10-03T14:25:24 UTC"
RECORD_ID="2_2019-10-03T14:25:00"
NAME="Connect"
CONNECTION_ID="4"
STATUS="0"
STATUS_CODE="0"
USER="root"
OS_LOGIN=""
HOST="localhost"
IP="127.0.0.1"
COMMAND_CLASS="connect"
CONNECTION_TYPE="SSL/TLS"
PRIV_USER="root"
PROXY_USER=""
DB="test"/>
...
<AUDIT_RECORD
TIMESTAMP="2019-10-03T14:25:24 UTC"
RECORD_ID="6_2019-10-03T14:25:00"
NAME="Query"
CONNECTION_ID="4"
STATUS="0"
STATUS_CODE="0"
USER="root[root] @ localhost [127.0.0.1]"
OS_LOGIN=""
HOST="localhost"
IP="127.0.0.1"
COMMAND_CLASS="drop_table"
SQLTEXT="DROP TABLE IF EXISTS t"/>
...
<AUDIT_RECORD
TIMESTAMP="2019-10-03T14:25:24 UTC"
RECORD_ID="8_2019-10-03T14:25:00"
NAME="Quit"
CONNECTION_ID="4"
STATUS="0"
STATUS_CODE="0"
USER="root"
OS_LOGIN=""
HOST="localhost"
IP="127.0.0.1"
COMMAND_CLASS="connect"
CONNECTION_TYPE="SSL/TLS"/>
<AUDIT_RECORD
TIMESTAMP="2019-10-03T14:25:32 UTC"
RECORD_ID="12_2019-10-03T14:25:00"
NAME="NoAudit"
SERVER_ID="1"/>
</AUDIT>
Файл журнала аудита записывается в формате XML с использованием кодировки UTF-8 (до 4 байтов на символ). Корневой элемент — <AUDIT>. Корневой элемент содержит элементы <AUDIT_RECORD>, каждый из которых предоставляет информацию о событии аудита. Когда плагин журнала аудита начинает запись нового файла журнала, он записывает объявление XML и открывающий тег корневого элемента <AUDIT>. Когда плагин закрывает файл журнала, он записывает закрывающий тег корневого элемента </AUDIT>. Закрывающего тега нет, пока файл открыт.
Атрибуты элементов <AUDIT_RECORD> имеют следующие характеристики:
Некоторые атрибуты присутствуют в каждом элементе
<AUDIT_RECORD>. Другие являются необязательными и могут появляться в зависимости от типа записи аудита.Порядок атрибутов внутри элемента
<AUDIT_RECORD>не гарантируется.Значения атрибутов не имеют фиксированной длины. Длинные значения могут быть усечены, как указано в описаниях атрибутов ниже.
Символы
<,>,"и&кодируются как<,>,"и&соответственно. Байты NUL (U+00) кодируются как символ?.-
Символы, не являющиеся допустимыми символами XML, кодируются с помощью числовых ссылок на символы. Допустимые символы XML:
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Следующие атрибуты являются обязательными в каждом элементе <AUDIT_RECORD>:
-
NAMEСтрока, представляющая тип инструкции, которая сгенерировала событие аудита, например, команду, полученную сервером от клиента.
Пример:
NAME="Query"Некоторые распространенные значения
NAME:Audit When auditing starts, which may be server startup time Connect When a client connects, also known as logging in Query An SQL statement (executed directly) Prepare Preparation of an SQL statement; usually followed by Execute Execute Execution of an SQL statement; usually follows Prepare Shutdown Server shutdown Quit When a client disconnects NoAudit Auditing has been turned off
Возможные значения:
Audit,Binlog Dump,Change user,Close stmt,Connect Out,Connect,Create DB,Daemon,Debug,Delayed insert,Drop DB,Execute,Fetch,Field List,Init DB,Kill,Long Data,NoAudit,Ping,Prepare,Processlist,Query,Quit,Refresh,Register Slave,Reset stmt,Set option,Shutdown,Sleep,Statistics,Table Dump,TableDelete,TableInsert,TableRead,TableUpdate,Time.Многие из этих значений соответствуют значениям команды
COM_, перечисленным в заголовочном файлеxxxmy_command.h. Например,"Create DB"и"Change user"соответствуютCOM_CREATE_DBиCOM_CHANGE_USERсоответственно.События, имеющие значения
NAME, равныеTable, сопровождаются событиямиXXXQuery. Например, следующее утверждение генерирует одно событиеQuery, два событияTableReadи одно событиеTableInsert:INSERT INTO t3 SELECT t1.* FROM t1 JOIN t2;
Каждое событие
Tableимеет атрибутыXXXTABLEиDBдля идентификации таблицы, к которой относится событие, и базы данных, содержащей таблицу.События
Connectдля формата журнала аудита XML старого стиля не включают атрибуты подключения. -
RECORD_IDУникальный идентификатор записи аудита. Значение состоит из порядкового номера и метки времени в формате
. Когда плагин журнала аудита открывает файл журнала аудита, он инициализирует порядковый номер размером файла журнала аудита, затем увеличивает порядковый номер на 1 для каждой записанной записи. Метка времени — это значение UTC в форматеSEQ_TIMESTAMP, указывающее дату и время открытия файла плагином журнала аудита.YYYY-MM-DDThh:mm:ssПример:
RECORD_ID="12_2019-10-03T14:25:00" -
TIMESTAMPСтрока, представляющая значение UTC в формате
, указывающее дату и время генерации события аудита. Например, событие, соответствующее выполнению SQL-запроса, полученного от клиента, имеет значениеYYYY-MM-DDThh:mm:ssUTCTIMESTAMP, которое происходит после завершения запроса, а не при его получении.Пример:
TIMESTAMP="2019-10-03T14:25:32 UTC"
Следующие атрибуты являются необязательными в элементах <AUDIT_RECORD>. Многие из них встречаются только для элементов со специфическими значениями атрибута NAME.
-
COMMAND_CLASSСтрока, указывающая тип выполненного действия.
Пример:
COMMAND_CLASS="drop_table"Значения соответствуют счётчикам команд
statement/sql/. Например,xxxxxx— этоdrop_tableиselectдля операторовDROP TABLEиSELECTсоответственно. Следующее выражение отображает возможные имена:SELECT REPLACE(EVENT_NAME, 'statement/sql/', '') AS name FROM performance_schema.events_statements_summary_global_by_event_name WHERE EVENT_NAME LIKE 'statement/sql/%' ORDER BY name;
-
CONNECTION_IDБеззнаковое целое число, представляющее идентификатор подключения клиента. Это то же самое, что значение, возвращаемое функцией
CONNECTION_ID()в рамках сессии.Пример:
CONNECTION_ID="127" -
CONNECTION_TYPEСостояние безопасности соединения с сервером. Разрешённые значения:
TCP/IP(соединение TCP/IP установлено без шифрования),SSL/TLS(соединение TCP/IP установлено с шифрованием),Socket(соединение по Unix-сокету),Named Pipe(соединение по именованной пайп-линии Windows), иShared Memory(соединение по общей памяти Windows).Пример:
CONNECTION_TYPE="SSL/TLS" -
DBСтрока, представляющая имя базы данных.
Пример:
DB="test"Для событий подключения это атрибут указывает базу данных по умолчанию; атрибут пуст, если база данных по умолчанию отсутствует. Для событий доступа к таблицам атрибут указывает базу данных, к которой принадлежит доступная таблица.
-
HOSTСтрока, представляющая имя хоста клиента.
Пример:
HOST="localhost" -
IPСтрока, представляющая IP-адрес клиента.
Пример:
IP="127.0.0.1" -
MYSQL_VERSIONСтрока, представляющая версию сервера MySQL. Это то же самое, что и значение функции
VERSION()или системной переменнойversion.Пример:
MYSQL_VERSION="5.7.21-log" -
OS_LOGINСтрока, представляющая имя внешнего пользователя, используемого во время процесса аутентификации, задаваемое плагином, используемым для аутентификации клиента. При использовании родной (встроенной) аутентификации MySQL или если плагин не задаёт значение, этот атрибут пуст. Значение совпадает со значением системной переменной
external_user(см. Раздел 8.2.19, «Proxy Users»).Пример:
OS_LOGIN="jeffrey" -
OS_VERSIONСтрока, представляющая операционную систему, на которой был построен или работает сервер.
Пример:
OS_VERSION="x86_64-Linux" -
PRIV_USERСтрока, представляющая имя пользователя, под которым сервер аутентифицировал клиента. Это имя пользователя, которое сервер использует для проверки привилегий, и оно может отличаться от значения
USER.Пример:
PRIV_USER="jeffrey" -
PROXY_USERСтрока, представляющая прокси-пользователя (см. Раздел 8.2.19, «Proxy Users»). Значение пусто, если проксирование пользователя не используется.
Пример:
PROXY_USER="developer" -
SERVER_IDБеззнаковое целое число, представляющее идентификатор сервера. Это то же самое, что и значение системной переменной
server_id.Пример:
SERVER_ID="1" -
SQLTEXTСтрока, представляющая текст SQL-запроса. Значение может быть пустым. Длинные значения могут быть усечены. Строка, подобно самому файлу журнала аудита, записывается с использованием UTF-8 (до 4 байт на символ), поэтому значение может быть результатом преобразования. Например, исходный запрос мог быть получен от клиента как строка SJIS.
Пример:
SQLTEXT="DELETE FROM t1" -
STARTUP_OPTIONSСтрока, представляющая параметры, заданные в командной строке или файлах параметров при запуске сервера MySQL.
Пример:
STARTUP_OPTIONS="--port=3306 --log_output=FILE" -
STATUSБеззнаковое целое число, представляющее состояние команды: 0 для успеха, ненулевое значение, если произошла ошибка. Это то же самое, что и значение функции C API. См. описание
STATUS_CODEдля информации о том, как оно отличается отSTATUS.Файл журнала аудита не содержит значение SQLSTATE или сообщение об ошибке. Чтобы узнать о связи между кодами ошибок, значениями SQLSTATE и сообщениями, см. .
Предупреждения не регистрируются.
Пример:
STATUS="1051" -
STATUS_CODEБеззнаковое целое число, представляющее состояние команды: 0 для успеха, 1, если произошла ошибка.
Значение
STATUS_CODEотличается от значенияSTATUS:STATUS_CODE— 0 для успеха и 1 для ошибки, что совместимо с потребителем EZ_collector для Audit Vault.STATUS— это значение функции C API. Это 0 для успеха и ненулевое значение для ошибки, и, следовательно, не обязательно 1 для ошибки.Пример:
STATUS_CODE="0" -
TABLEСтрока, представляющая имя таблицы.
Пример:
TABLE="t3" -
USERСтрока, представляющая имя пользователя, отправленное клиентом. Это может отличаться от значения
PRIV_USER. -
VERSIONБеззнаковое целое число, представляющее версию формата файла журнала аудита.
Пример:
VERSION="1"
Формат файла журнала аудита JSON
Для журналирования аудита в формате JSON (audit_log_format=JSON), содержимое файла журнала формируется в виде JSON массива, при этом каждый элемент массива представляет собой аудиторское событие в виде JSON хэша пар ключ-значение. Примеры полных записей событий приведены позже в этом разделе. Ниже приведён фрагмент частичных событий:
[
{
"timestamp": "2019-10-03 13:50:01",
"id": 0,
"class": "audit",
"event": "startup",
...
},
{
"timestamp": "2019-10-03 15:02:32",
"id": 0,
"class": "connection",
"event": "connect",
...
},
...
{
"timestamp": "2019-10-03 17:37:26",
"id": 0,
"class": "table_access",
"event": "insert",
...
}
...
]
Файл журнала аудита записывается с использованием UTF-8 (до 4 байт на символ). Когда плагин журнала аудита начинает запись нового файла журнала, он записывает открывающий [ маркер массива. Когда плагин закрывает файл журнала, он записывает закрывающий ] маркер массива. Закрывающего маркера нет, пока файл открыт.
Элементы внутри записей аудита обладают следующими характеристиками:
Некоторые элементы присутствуют в каждой записи аудита. Другие являются необязательными и могут появляться в зависимости от типа записи аудита.
Порядок элементов в записи аудита не гарантирован.
Значения элементов не имеют фиксированной длины. Длинные значения могут быть усечены, как указано в описаниях элементов, представленных позже.
Символы
"и\кодируются как\"и\\соответственно.
Формат JSON — единственный формат файла журнала аудита, поддерживающий необязательные статистику времени запроса и объёма. Эти данные доступны в журнале медленных запросов для соответствующих запросов, и в контексте журнала аудита они аналогичным образом помогают выявлять аномалии для анализа активности.
Для добавления статистики запросов в файл журнала, необходимо настроить их как фильтр, используя функцию журнала аудита audit_log_filter_set_filter() в качестве элемента сервиса синтаксиса фильтрации JSON. Инструкции по выполнению этого действия см. в Добавление статистики запросов для выявления аномалий. Для того, чтобы поля bytes_sent и bytes_received были заполнены, переменная системы log_slow_extra должна быть установлена в значение ON.
Следующие примеры показывают форматы JSON-объектов для различных типов событий (как указано элементами class и event), слегка переформатированные для удобочитаемости:
Событие запуска аудита:
{ "timestamp": "2019-10-03 14:21:56",
"id": 0,
"class": "audit",
"event": "startup",
"connection_id": 0,
"startup_data": { "server_id": 1,
"os_version": "i686-Linux",
"mysql_version": "5.7.21-log",
"args": ["/usr/local/mysql/bin/mysqld",
"--loose-audit-log-format=JSON",
"--log-error=log.err",
"--pid-file=mysqld.pid",
"--port=3306" ] } }
Когда плагин журнала аудита запускается в результате запуска сервера (в отличие от включения во время работы), connection_id устанавливается в 0, а account и login отсутствуют.
Событие завершения аудита:
{ "timestamp": "2019-10-03 14:28:20",
"id": 3,
"class": "audit",
"event": "shutdown",
"connection_id": 0,
"shutdown_data": { "server_id": 1 } }
Когда плагин журнала аудита удаляется в результате завершения работы сервера (в отличие от отключения во время работы), connection_id устанавливается в 0, а account и login отсутствуют.
Событие подключения или смены пользователя:
{ "timestamp": "2019-10-03 14:23:18",
"id": 1,
"class": "connection",
"event": "connect",
"connection_id": 5,
"account": { "user": "root", "host": "localhost" },
"login": { "user": "root", "os": "", "ip": "::1", "proxy": "" },
"connection_data": { "connection_type": "ssl",
"status": 0,
"db": "test",
"connection_attributes": {
"_pid": "43236",
...
"program_name": "mysqladmin"
} }
}
Событие отключения:
{ "timestamp": "2019-10-03 14:24:45",
"id": 3,
"class": "connection",
"event": "disconnect",
"connection_id": 5,
"account": { "user": "root", "host": "localhost" },
"login": { "user": "root", "os": "", "ip": "::1", "proxy": "" },
"connection_data": { "connection_type": "ssl" } }
Событие запроса:
{ "timestamp": "2019-10-03 14:23:35",
"id": 2,
"class": "general",
"event": "status",
"connection_id": 5,
"account": { "user": "root", "host": "localhost" },
"login": { "user": "root", "os": "", "ip": "::1", "proxy": "" },
"general_data": { "command": "Query",
"sql_command": "show_variables",
"query": "SHOW VARIABLES",
"status": 0 } }
Событие запроса с необязательной статистикой запроса для выявления аномалий:
{ "timestamp": "2022-01-28 13:09:30",
"id": 0,
"class": "general",
"event": "status",
"connection_id": 46,
"account": { "user": "user", "host": "localhost" },
"login": { "user": "user", “os": "", “ip": "127.0.0.1", “proxy": "" },
"general_data": { "command": "Query",
"sql_command": "insert",
"query": "INSERT INTO audit_table VALUES(4)",
"status": 1146 }
"query_statistics": { "query_time": 0.116250,
"bytes_sent": 18384,
"bytes_received": 78858,
"rows_sent": 3,
"rows_examined": 20878 } }
Событие доступа к таблице (чтение, удаление, вставка, обновление):
{ "timestamp": "2019-10-03 14:23:41",
"id": 0,
"class": "table_access",
"event": "insert",
"connection_id": 5,
"account": { "user": "root", "host": "localhost" },
"login": { "user": "root", "os": "", "ip": "127.0.0.1", "proxy": "" },
"table_access_data": { "db": "test",
"table": "t1",
"query": "INSERT INTO t1 (i) VALUES(1),(2),(3)",
"sql_command": "insert" } }
Элементы в следующем списке появляются на верхнем уровне записей аудита в формате JSON: значение каждого элемента является скалярным или JSON хэшем. Для элементов, имеющих значение хэша, в описании указаны только имена элементов внутри этого хэша. Для более подробных описаний элементов хэша второго уровня см. позже в этом разделе.
-
accountАссоциированная с событием учётная запись MySQL. Значение — хеш, содержащий элементы, эквивалентные значению функции
CURRENT_USER()в разделе:user,host.Пример:
"account": { "user": "root", "host": "localhost" } -
classСтрока, представляющая класс события. Класс определяет тип события, вместе с элементом
event, указывающим подкласс события.Пример:
"class": "connection"
В следующей таблице показаны разрешённые комбинации значений
classиevent.Таблица 8.34 Комбинации класса и события журнала аудита
Таблица 8.34 Комбинации класса и события журнала аудита Значение класса Разрешённые значения события auditstartup,shutdownconnectionconnect,change_user,disconnectgeneralstatustable_access_dataread,delete,insert,update
-
connection_dataИнформация о подключении клиента. Значение — хеш, содержащий эти элементы:
connection_type,status,dbи, возможно,connection_attributes. Этот элемент встречается только в записях аудита со значениемclass, равнымconnection.Пример:
"connection_data": { "connection_type": "ssl", "status": 0, "db": "test" }События со значением
class, равнымconnection, и значениемevent, равнымconnect, могут содержать элементconnection_attributesдля отображения атрибутов подключения, переданных клиентом во время подключения. (Для получения информации об этих атрибутах, которые также отображаются в таблицах Performance Schema, см. Раздел 29.12.9, «Таблицы атрибутов подключения Performance Schema».)Значение
connection_attributes— хеш, представляющий каждый атрибут по имени и значению.Пример:
"connection_attributes": { "_pid": "43236", "_os": "macos0.14", "_platform": "x86_64", "_client_version": "8.4.0", "_client_name": "libmysql", "program_name": "mysqladmin" }Если атрибутов подключения в событии нет, они не регистрируются, и элемент
connection_attributesне появляется. Это может произойти, если попытка подключения неудачна, клиент не передаёт атрибуты или подключение происходит внутренне, например, во время запуска сервера или при инициализации плагином. -
connection_idБеззнаковое целое число, представляющее идентификатор подключения клиента. Это то же значение, что и возвращаемое функцией
CONNECTION_ID()внутри сессии.Пример:
"connection_id": 5
-
eventСтрока, представляющая подкласс класса события. Подкласс определяет тип события вместе с элементом
class, который указывает класс события. Для получения дополнительной информации см. описание элементаclass.Пример:
"event": "connect"
-
general_dataИнформация об исполняемом операторе или команде. Значение — хеш, содержащий эти элементы:
command,sql_command,query,status. Этот элемент встречается только в записях аудита со значениемclass, равнымgeneral.Пример:
"general_data": { "command": "Query", "sql_command": "show_variables", "query": "SHOW VARIABLES", "status": 0 } -
idБеззнаковое целое число, представляющее идентификатор события.
Пример:
"id": 2
Для записей аудита с одинаковым значением
timestampих значенияidотличают их и образуют последовательность. В журнале аудита парыtimestamp/idуникальны. Эти пары служат метками, которые идентифицируют места событий в журнале. -
loginИнформация о том, как клиент подключился к серверу. Значение — хеш, содержащий эти элементы:
user,os,ip,proxy.Пример:
"login": { "user": "root", "os": "", "ip": "::1", "proxy": "" } -
query_statisticsНеобязательные статистические данные запроса для обнаружения аномалий. Значение — хеш, содержащий эти элементы:
query_time,rows_sent,rows_examined,bytes_received,bytes_sent. Инструкции по настройке статистических данных запросов см. в разделе Добавление статистики запросов для обнаружения аномалий.Пример:
"query_statistics": { "query_time": 0.116250, "bytes_sent": 18384, "bytes_received": 78858, "rows_sent": 3, "rows_examined": 20878 } -
shutdown_dataИнформация, относящаяся к завершению плагина журнала аудита. Значение — хеш, содержащий эти элементы:
server_idЭтот элемент встречается только для записей аудита со значениямиclassиevent, равнымиauditиshutdownсоответственно.Пример:
"shutdown_data": { "server_id": 1 } -
startup_dataИнформация, относящаяся к инициализации плагина журнала аудита. Значение — хеш, содержащий эти элементы:
server_id,os_version,mysql_version,args. Этот элемент встречается только для записей аудита со значениямиclassиevent, равнымиauditиstartupсоответственно.Пример:
"startup_data": { "server_id": 1, "os_version": "i686-Linux", "mysql_version": "5.7.21-log", "args": ["/usr/local/mysql/bin/mysqld", "--loose-audit-log-format=JSON", "--log-error=log.err", "--pid-file=mysqld.pid", "--port=3306" ] } -
table_access_dataИнформация об доступе к таблице. Значение — хеш, содержащий эти элементы:
db,table,query,sql_command. Этот элемент встречается только для записей аудита со значениемclass, равнымtable_access.Пример:
"table_access_data": { "db": "test", "table": "t1", "query": "INSERT INTO t1 (i) VALUES(1),(2),(3)", "sql_command": "insert" } -
timeЭтот элемент аналогичен элементу
timestamp, но значение является целым числом и представляет собой значение временной метки UNIX, обозначающее дату и время, когда было сгенерировано событие аудита.Пример:
"time" : 1618498687
Элемент
timeпоявляется в файлах журналов в формате JSON только если переменная системыaudit_log_format_unix_timestampвключена. -
timestampСтрока, представляющая значение UTC в формате
YYYY-MM-DD hh:mm:ss, обозначающая дату и время генерации события аудита. Например, событие, соответствующее выполнению SQL-запроса, полученного от клиента, имеет значениеtimestamp, которое появляется после завершения запроса, а не при его получении.Пример:
"timestamp": "2019-10-03 13:50:01"
Для записей аудита с одинаковым значением
timestampих значенияidотличают их и образуют последовательность. В журнале аудита парыtimestamp/idуникальны. Эти пары служат метками, которые идентифицируют места событий в журнале.
Эти элементы появляются внутри значений хешей, связанных с элементами верхнего уровня записей журналов аудита в формате JSON:
-
argsМассив параметров, заданных в командной строке или файлах параметров при запуске сервера MySQL. Первый параметр — путь к исполняемому файлу сервера.
Пример:
"args": ["/usr/local/mysql/bin/mysqld", "--loose-audit-log-format=JSON", "--log-error=log.err", "--pid-file=mysqld.pid", "--port=3306" ] -
bytes_receivedКоличество байтов, полученных от клиента. Этот элемент является частью необязательной статистики запросов. Для заполнения этого поля переменная системы
log_slow_extraдолжна быть установлена в значениеON.Пример:
"bytes_received": 78858
-
bytes_sentКоличество байтов, отправленных клиенту. Этот элемент является частью необязательной статистики запросов. Для заполнения этого поля переменная системы
log_slow_extraдолжна быть установлена в значениеON.Пример:
"bytes_sent": 18384
-
commandСтрока, представляющая тип инструкции, которая сгенерировала событие аудита, например, команду, полученную сервером от клиента.
Пример:
"command": "Query"
-
connection_typeСостояние безопасности подключения к серверу. Разрешенные значения:
tcp/ip(TCP/IP-соединение установлено без шифрования),ssl(TCP/IP-соединение установлено с шифрованием),socket(соединение через Unix-сокет),named_pipe(соединение через именованную Windows-пайп), иshared_memory(соединение через общую память Windows).Пример:
"connection_type": "tcp/tcp"
-
dbСтрока, представляющая имя базы данных. Для
connection_dataэто база данных по умолчанию. Дляtable_access_dataэто база данных таблиц.Пример:
"db": "test"
-
hostСтрока, представляющая имя хоста клиента.
Пример:
"host": "localhost"
-
ipСтрока, представляющая IP-адрес клиента.
Пример:
"ip": "::1"
-
mysql_versionСтрока, представляющая версию сервера MySQL. Она совпадает со значением функции
VERSION()или переменной системыversion.Пример:
"mysql_version": "5.7.21-log"
-
osСтрока, представляющая имя внешнего пользователя, используемого во время процесса аутентификации, как задано подключаемым модулем для аутентификации клиента. При использовании родной (встроенной) аутентификации MySQL или если модуль не задаёт значение, этот атрибут пуст. Значение совпадает со значением переменной системы
external_user. См. Раздел 8.2.19, «Пользователи-прокси».Пример:
"os": "jeffrey"
-
os_versionСтрока, представляющая операционную систему, на которой сервер был скомпилирован или на которой он работает.
Пример:
"os_version": "i686-Linux"
-
proxyСтрока, представляющая пользователя-прокси (см. Раздел 8.2.19, «Пользователи-прокси»). Значение пусто, если проксирование пользователя не включено.
Пример:
"proxy": "developer"
-
queryСтрока, представляющая текст SQL-запроса. Значение может быть пустым. Длинные значения могут быть усечены. Строка, как и сам файл журнала аудита, записывается с использованием UTF-8 (до 4 байтов на символ), поэтому значение может быть результатом преобразования. Например, исходный запрос мог быть получен от клиента в виде строки SJIS.
Пример:
"query": "DELETE FROM t1"
-
query_timeВремя выполнения запроса в микросекундах (если выбран тип данных
longlong) или секундах (если выбран тип данныхdouble). Этот элемент является частью необязательной статистики запросов.Пример:
"query_time": 0.116250
-
rows_examinedКоличество строк, к которым был осуществлён доступ во время запроса. Этот элемент является частью необязательной статистики запросов.
Пример:
"rows_examined": 20878
-
rows_sentКоличество строк, отправленных клиенту в результате. Этот элемент является частью необязательной статистики запросов.
Пример:
"rows_sent": 3
-
server_idБеззнаковое целое число, представляющее идентификатор сервера. Совпадает со значением переменной системы
server_id.Пример:
"server_id": 1
-
sql_commandСтрока, указывающая тип SQL-запроса.
Пример:
"sql_command": "insert"
Значения соответствуют счётчикам команд
statement/sql/. Например,xxxxxxэтоdrop_tableиselectдля командDROP TABLEиSELECTсоответственно. Следующая команда отобразит возможные названия:SELECT REPLACE(EVENT_NAME, 'statement/sql/', '') AS name FROM performance_schema.events_statements_summary_global_by_event_name WHERE EVENT_NAME LIKE 'statement/sql/%' ORDER BY name;
-
statusБеззнаковое целое число, представляющее состояние команды: 0 для успешного выполнения, ненулевое значение — при возникновении ошибки. Совпадает со значением функции C API.
Журнал аудита не содержит значения SQLSTATE или сообщения об ошибке. Чтобы увидеть соответствия между кодами ошибок, значениями SQLSTATE и сообщениями, см. .
Предупреждения не регистрируются.
Пример:
"status": 1051
-
tableСтрока, представляющая имя таблицы.
Пример:
"table": "t1"
-
userСтрока, представляющая имя пользователя. Значение различно в зависимости от элемента, в котором встречается
user:Внутри элементов
account,userпредставляет строку, представляющую пользователя, под которым сервер аутентифицировал клиента. Это имя пользователя, используемое сервером для проверки привилегий.Внутри элементов
login,userпредставляет строку, представляющую имя пользователя, отправленное клиентом.
Пример:
"user": "root"
© 2025 Oracle
Licensed under the GPLv2 License.