Spec-Zone.ru › MySQL 9.2

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 старого стиля

  • Формат файла журнала аудита 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> не гарантируется.

  • Значения элементов не имеют фиксированной длины. Длинные значения могут быть усечены, как указано в описаниях элементов, приведенных ниже.

  • Символы <, >, " и & кодируются как &lt;, &gt;, &quot; и &amp; соответственно. Байты 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_xxx, перечисленным в заголовочном файле my_command.h. Например, Create DB и Change user соответствуют COM_CREATE_DB и COM_CHANGE_USER соответственно.

    События со значениями <NAME> TableXXX сопровождают события Query. Например, следующее утверждение генерирует одно событие Query, два события TableRead и событие TableInsert:

    INSERT INTO t3 SELECT t1.* FROM t1 JOIN t2;
    

    Каждое событие TableXXX содержит элементы <TABLE> и <DB> для идентификации таблицы, к которой относится событие, и базы данных, в которой находится таблица.

  • <RECORD_ID>

    Уникальный идентификатор записи аудита. Значение состоит из порядкового номера и метки времени в формате SEQ_TIMESTAMP. Когда плагин журнала аудита открывает файл журнала аудита, он инициализирует порядковый номер размером файла журнала аудита, затем увеличивает порядковый номер на 1 для каждой записанной записи. Метка времени — это значение UTC в формате YYYY-MM-DDThh:mm:ss, обозначающее дату и время открытия файла плагином журнала аудита.

    Пример:

    <RECORD_ID>12_2019-10-03T14:06:33</RECORD_ID>
    
  • <TIMESTAMP>

    Строка, представляющая значение UTC в формате YYYY-MM-DDThh:mm:ss UTC, обозначающая дату и время генерации события аудита. Например, событие, соответствующее выполнению SQL-запроса, полученного от клиента, имеет значение <TIMESTAMP>, возникающее после завершения запроса, а не при его получении.

    Пример:

    <TIMESTAMP>2019-10-03T14:09:45 UTC</TIMESTAMP>
    

Следующие элементы являются необязательными в элементах <AUDIT_RECORD>. Многие из них появляются только со специфическими значениями элементов <NAME>.

  • <COMMAND_CLASS>

    Строка, указывающая тип выполненного действия.

    Пример:

    <COMMAND_CLASS>drop_table</COMMAND_CLASS>
    

    Значения соответствуют счётчикам команд statement/sql/xxx. Например, xxx соответствует 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> не гарантируется.

  • Значения атрибутов не имеют фиксированной длины. Длинные значения могут быть усечены, как указано в описаниях атрибутов ниже.

  • Символы <, >, " и & кодируются как &lt;, &gt;, &quot; и &amp; соответственно. Байты 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_xxx, перечисленным в заголовочном файле my_command.h. Например, "Create DB" и "Change user" соответствуют COM_CREATE_DB и COM_CHANGE_USER соответственно.

    События, имеющие значения NAME, равные TableXXX, сопровождаются событиями Query. Например, следующее утверждение генерирует одно событие Query, два события TableRead и одно событие TableInsert:

    INSERT INTO t3 SELECT t1.* FROM t1 JOIN t2;
    

    Каждое событие TableXXX имеет атрибуты TABLE и DB для идентификации таблицы, к которой относится событие, и базы данных, содержащей таблицу.

    События Connect для формата журнала аудита XML старого стиля не включают атрибуты подключения.

  • RECORD_ID

    Уникальный идентификатор записи аудита. Значение состоит из порядкового номера и метки времени в формате SEQ_TIMESTAMP. Когда плагин журнала аудита открывает файл журнала аудита, он инициализирует порядковый номер размером файла журнала аудита, затем увеличивает порядковый номер на 1 для каждой записанной записи. Метка времени — это значение UTC в формате YYYY-MM-DDThh:mm:ss, указывающее дату и время открытия файла плагином журнала аудита.

    Пример: RECORD_ID="12_2019-10-03T14:25:00"

  • TIMESTAMP

    Строка, представляющая значение UTC в формате YYYY-MM-DDThh:mm:ss UTC, указывающее дату и время генерации события аудита. Например, событие, соответствующее выполнению SQL-запроса, полученного от клиента, имеет значение TIMESTAMP, которое происходит после завершения запроса, а не при его получении.

    Пример: TIMESTAMP="2019-10-03T14:25:32 UTC"

Следующие атрибуты являются необязательными в элементах <AUDIT_RECORD>. Многие из них встречаются только для элементов со специфическими значениями атрибута NAME.

  • COMMAND_CLASS

    Строка, указывающая тип выполненного действия.

    Пример: COMMAND_CLASS="drop_table"

    Значения соответствуют счётчикам команд statement/sql/xxx. Например, xxx — это 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 хэшем. Для элементов, имеющих значение хэша, в описании указаны только имена элементов внутри этого хэша. Для более подробных описаний элементов хэша второго уровня см. позже в этом разделе.

END_OF_DOCUMENT_MARKER
  • account

    Ассоциированная с событием учётная запись MySQL. Значение — хеш, содержащий элементы, эквивалентные значению функции CURRENT_USER() в разделе: user, host.

    Пример:

    "account": { "user": "root", "host": "localhost" }
    
  • class

    Строка, представляющая класс события. Класс определяет тип события, вместе с элементом event, указывающим подкласс события.

    Пример:

    "class": "connection"
    

    В следующей таблице показаны разрешённые комбинации значений class и event.

    Таблица 8.34 Комбинации класса и события журнала аудита

    Таблица 8.34 Комбинации класса и события журнала аудита
    Значение класса Разрешённые значения события
    audit startup, shutdown
    connection connect, change_user, disconnect
    general status
    table_access_data read, 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/xxx. Например, xxx это 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.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/audit-log-file-formats.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API