6.4.5.4 Форматы журналов аудита
Сервер MySQL вызывает плагин журнала аудита для записи записи аудита в свой файл журнала всякий раз, когда происходит событие, подлежащее аудиту. Обычно первая запись аудита, записанная после запуска плагина, содержит описание сервера и параметры запуска. Элементы, следующие за ним, представляют события, такие как подключение и отключение клиента, выполненные SQL-запросы и так далее. В журнал записываются только верхние запросы, а не запросы внутри хранимых программ, таких как триггеры или хранимые процедуры. Содержимое файлов, на которые ссылаются запросы, такие как LOAD
DATA, не записываются в журнал.
Чтобы выбрать формат журнала, который плагин журнала аудита использует для записи своего файла журнала, установите системную переменную audit_log_format при запуске сервера. Доступны следующие форматы:
Формат XML нового стиля (
audit_log_format=NEW): Формат XML, который имеет лучшую совместимость с Oracle Audit Vault, чем формат XML старого стиля. MySQL 5.7 по умолчанию использует формат XML нового стиля.Формат XML старого стиля (
audit_log_format=OLD): Исходный формат журнала аудита, используемый по умолчанию в более старых версиях MySQL.Формат JSON (
audit_log_format=JSON)
По умолчанию содержимое файла журнала аудита записывается в формате XML нового стиля без сжатия или шифрования.
Сведения о проблемах, которые следует учитывать при изменении формата журнала, см. в разделе Выбор формата файла журнала аудита.
В следующих разделах описаны доступные форматы ведения журнала аудита:
Формат файла журнала аудита 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>
<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_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(см. Раздел 6.2.14, «Пользователи-прокси»).Пример:
<OS_LOGIN>jeffrey</OS_LOGIN>
-
<OS_VERSION>Строка, представляющая операционную систему, на которой был построен или работает сервер.
Пример:
<OS_VERSION>x86_64-Linux</OS_VERSION>
-
<PRIV_USER>Строка, представляющая пользователя, под которым сервер выполнил аутентификацию клиента. Это имя пользователя, которое сервер использует для проверки привилегий и может отличаться от значения
<USER>.Пример:
<PRIV_USER>jeffrey</PRIV_USER>
-
<PROXY_USER>Строка, представляющая пользователя-прокси (см. Раздел 6.2.14, «Пользователи-прокси»). Значение пусто, если использование прокси-пользователей не активны.
Пример:
<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соответственно.События со значениями
NAMETableсопровождают событияXXXQuery. Например, следующее утверждение генерирует одно событиеQuery, два событияTableReadи событиеTableInsert:INSERT INTO t3 SELECT t1.* FROM t1 JOIN t2;
Каждое событие
Tableимеет атрибутыXXXTABLEиDBдля идентификации таблицы, к которой относится событие, и базы данных, которая содержит эту таблицу. -
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(см. Раздел 6.2.14, “Proxy Users”).Пример:
OS_LOGIN="jeffrey" -
OS_VERSIONСтрока, представляющая операционную систему, на которой был построен или работает сервер.
Пример:
OS_VERSION="x86_64-Linux" -
PRIV_USERСтрока, представляющая пользователя, под которым сервер аутентифицировал клиента. Это имя пользователя, которое сервер использует для проверки привилегий, и оно может отличаться от значения
USER.Пример:
PRIV_USER="jeffrey" -
PROXY_USERСтрока, представляющая прокси-пользователя (см. Раздел 6.2.14, “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 для различных типов событий (как указано в элементах 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" } }
Событие отключения:
{ "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": "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.Таблица 6.25 Комбинации класса и события журнала аудита
Таблица 6.25 Комбинации класса и события журнала аудита Значение класса Допустимые значения событий auditstartup,shutdownconnectionconnect,change_user,disconnectgeneralstatustable_access_dataread,delete,insert,update
-
connection_dataИнформация о клиентском подключении. Значение представляет собой хеш, содержащий следующие элементы:
connection_type,status,db. Этот элемент встречается только для записей аудита со значениемclassравнымconnection.Пример:
"connection_data": { "connection_type": "ssl", "status": 0, "db": "test" } -
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": "" } -
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" ] -
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. Смотрите Раздел 6.2.14, «Proxy Users».Пример:
"os": "jeffrey"
-
os_versionСтрока, представляющая операционную систему, на которой сервер был построен или работает.
Пример:
"os_version": "i686-Linux"
-
proxyСтрока, представляющая прокси-пользователя (см. Раздел 6.2.14, «Proxy Users»). Значение пустое, если проксирование пользователя не используется.
Пример:
"proxy": "developer"
-
queryСтрока, представляющая текст SQL-запроса. Значение может быть пустым. Длинные значения могут быть усечены. Строка, подобно самому файлу журнала аудита, записывается с использованием UTF-8 (до 4 байт на символ), поэтому значение может быть результатом преобразования. Например, исходный запрос мог быть получен от клиента как строка SJIS.
Пример:
"query": "DELETE FROM t1"
-
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.