Spec-Zone.ru › MySQL 5.7

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

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

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

  • Символы <, >, " и & закодированы как &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 для идентификации таблицы, к которой относится событие, и базы данных, которая содержит эту таблицу.

  • 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 (см. Раздел 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 Комбинации класса и события журнала аудита
    Значение класса Допустимые значения событий
    audit startup, shutdown
    connection connect, change_user, disconnect
    general status
    table_access_data read, 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/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-5.7-en/audit-log-file-formats.html

Spec-Zone.ru

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