このページは機械翻訳したものです。
MySQL サーバーは、監査可能なイベントが発生するたびに、監査ログプラグインを呼び出して監査レコードをそのログファイルに書き込みます。 通常、プラグインの起動後に書き込まれる最初の監査レコードには、サーバーの説明と起動オプションが含まれます。 そのあとの要素は、クライアントの接続および切断イベント、SQL ステートメントの実行などのイベントを表します。 最上位のステートメントのみのログが記録され、トリガーやストアドプロシージャーなどのストアドプログラム内のステートメントのログは記録されません。 LOAD DATA などのステートメントで参照されるファイルの内容は記録されません。
監査ログプラグインがログファイルの書き込みに使用するログ形式を選択するには、サーバーの起動時に audit_log_format システム変数を設定します。 次の形式を使用できます:
新しいスタイルの XML 形式 (
audit_log_format=NEW): 古い形式の XML 形式よりも Oracle Audit Vault との互換性が高いXML形式。 MySQL 8.0 では、デフォルトで新しいスタイルの XML 形式が使用されます。「古いスタイルの XML」形式 (
audit_log_format=OLD): 古い MySQL シリーズでデフォルトで使用される元の監査ログ形式。JSON 形式 (
audit_log_format=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>
監査ログファイルは、UTF-8 (1 文字当たり最大 4 バイト) を使用した XML として記述されています。 ルート要素は、<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です。これらの値の多くは、
my_command.hヘッダーファイルにリストされているCOM_コマンド値に対応しています。 たとえば、xxxCreate DBおよびChange userは、それぞれCOM_CREATE_DBおよびCOM_CHANGE_USERに対応します。TableのXXX<NAME>値を持つイベントには、Queryイベントが付随します。 たとえば、次のステートメントは、1 つのQueryイベント、2 つのTableReadイベントおよびTableInsertイベントを生成します:INSERT INTO t3 SELECT t1.* FROM t1 JOIN t2;各
Tableイベントには、イベントが参照するテーブルを識別するXXX<DB>および<TABLE>要素が含まれます。 -
<RECORD_ID>監査レコードを表す一意の識別子。 この値はシーケンス番号とタイムスタンプで構成され、形式は
です。 監査ログプラグインが監査ログファイルを開くと、順序番号が監査ログファイルのサイズに初期化され、記録されるレコードごとに順序が 1 ずつ増分されます。 タイムスタンプは、監査ログプラグインがファイルを開いた日時を示すSEQ_TIMESTAMP形式の UTC 値です。YYYY-MM-DDThh:mm:ss例:
<RECORD_ID>12_2019-10-03T14:06:33</RECORD_ID> -
<TIMESTAMP>監査イベントが生成された日時を示す
形式の UTC 値を表す文字列。 たとえば、クライアントから受信した SQL ステートメントの実行に対応するイベントのYYYY-MM-DDThh:mm:ssUTC<TIMESTAMP>値は、受信時ではなく、ステートメントの終了後に発生します。例:
<TIMESTAMP>2019-10-03T14:09:45 UTC</TIMESTAMP>
次の要素は、<AUDIT_RECORD> 要素ではオプションです。 これらの多くは、特定の <NAME> 要素値でのみ発生します。
-
<COMMAND_CLASS>実行されたアクションのタイプを示す文字列。
例:
<COMMAND_CLASS>drop_table</COMMAND_CLASS>値は
statement/sql/コマンドカウンタに対応しています。 たとえば、xxxxxxは、DROP TABLEおよびSELECTステートメントのそれぞれdrop_tableおよびselectです。 次のステートメントは、使用可能な名前を表示します:SELECT REPLACE(EVENT_NAME, 'statement/sql/', '') AS name FROM performance_schema.events_statements_summary_global_by_event_name WHERE EVENT_NAME LIKE 'statement/sql/%' ORDER BY name; -
<CONNECTION_ATTRIBUTES>MySQL 8.0.19 では、
<COMMAND_CLASS>値がconnectのイベントに<CONNECTION_ATTRIBUTES>要素が含まれ、接続時にクライアントによって渡される接続属性が表示される場合があります。 (「パフォーマンススキーマ」テーブルでも公開されるこれらの属性の詳細は、セクション27.12.9「パフォーマンススキーマ接続属性テーブル」 を参照してください。)<CONNECTION_ATTRIBUTES>要素には属性ごとに 1 つの<ATTRIBUTE>要素が含まれ、それぞれに属性名と値を示す<NAME>要素と<VALUE>要素が含まれます。例:
<CONNECTION_ATTRIBUTES> <ATTRIBUTE> <NAME>_pid</NAME> <VALUE>42794</VALUE> </ATTRIBUTE> <ATTRIBUTE> <NAME>_os</NAME> <VALUE>macos10.14</VALUE> </ATTRIBUTE> <ATTRIBUTE> <NAME>_platform</NAME> <VALUE>x86_64</VALUE> </ATTRIBUTE> <ATTRIBUTE> <NAME>_client_version</NAME> <VALUE>8.0.19</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システム変数の値と同じです (セクション6.2.18「プロキシユーザー」 を参照)。例:
<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.18「プロキシユーザー」 を参照)。 ユーザーのプロキシ処理が有効になっていない場合は、値が空です。
例:
<PROXY_USER>developer</PROXY_USER> -
<SERVER_ID>サーバー ID を表す符号なし整数。 これは、
server_idシステム変数の値と同じです。例:
<SERVER_ID>1</SERVER_ID> -
<SQLTEXT>SQL ステートメントのテキストを表す文字列。 この値は、空にすることができます。 長い値は、切り捨てられる可能性があります。 監査ログファイル自体などの文字列は、UTF-8 (1 文字当たり最大 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、エラーが発生した場合はゼロ以外)。 これは、
mysql_errno()C API 関数の値と同じです。<STATUS>と異なる点については、<STATUS_CODE>の説明を参照してください。監査ログには、SQLSTATE 値またはエラーメッセージが含まれていません。 エラーコード、SQLSTATE 値、およびメッセージ間の関連性を確認する方法については、Server Error Message Referenceを参照してください。
警告のログは記録されません。
例:
<STATUS>1051</STATUS> -
<STATUS_CODE>コマンドのステータスを表す符号なし整数 (成功した場合は 0、エラーが発生した場合は 1)。
STATUS_CODEの値は、STATUSの値とは異なります。STATUS_CODEは、成功した場合は 0、エラーが発生した場合は 1 であり、Audit Vault の EZ_collector コンシューマとの互換性があります。STATUSは、mysql_errno()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 形式 (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>
監査ログファイルは、UTF-8 (1 文字当たり最大 4 バイト) を使用した XML として記述されています。 ルート要素は、<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です。これらの値の多くは、
my_command.hヘッダーファイルにリストされているCOM_コマンド値に対応しています。 たとえば、xxx"Create DB"および"Change user"は、それぞれCOM_CREATE_DBおよびCOM_CHANGE_USERに対応します。TableのXXXNAME値を持つイベントには、Queryイベントが付随します。 たとえば、次のステートメントは、1 つのQueryイベント、2 つのTableReadイベントおよびTableInsertイベントを生成します:INSERT INTO t3 SELECT t1.* FROM t1 JOIN t2;各
Tableイベントには、イベントが参照するテーブルを識別するためのXXXDBおよびTABLE属性があります。古い形式の XML 監査ログ形式の
Connectイベントには、接続属性は含まれません。 -
RECORD_ID監査レコードを表す一意の識別子。 この値はシーケンス番号とタイムスタンプで構成され、形式は
です。 監査ログプラグインが監査ログファイルを開くと、順序番号が監査ログファイルのサイズに初期化され、記録されるレコードごとに順序が 1 ずつ増分されます。 タイムスタンプは、監査ログプラグインがファイルを開いた日時を示すSEQ_TIMESTAMP形式の UTC 値です。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_VERSIONMySQL サーバーのバージョンを表す文字列。 これは、セッション内の
VERSION()関数またはversionシステム変数の値と同じです。例:
MYSQL_VERSION="5.7.21-log" -
OS_LOGIN認証プロセス中に使用される外部ユーザー名を表す文字列。クライアントの認証に使用されるプラグインによって設定されます。 ネイティブ (組込み) MySQL 認証の場合、またはプラグインで値が設定されていない場合、この属性は空です。 この値は、
external_userシステム変数の値と同じです (セクション6.2.18「プロキシユーザー」 を参照)。例:
OS_LOGIN="jeffrey" -
OS_VERSIONサーバーが構築された、または実行されているオペレーティングシステムを表す文字列。
例:
OS_VERSION="x86_64-Linux" -
PRIV_USERサーバーがクライアントを認証する際に使用したユーザーを表す文字列。 これは、サーバーが権限チェックに使用するユーザー名で、
USERの値とは異なる場合があります。例:
PRIV_USER="jeffrey" -
PROXY_USERプロキシユーザーを表す文字列 (セクション6.2.18「プロキシユーザー」 を参照)。 ユーザーのプロキシ処理が有効になっていない場合は、値が空です。
例:
PROXY_USER="developer" -
SERVER_IDサーバー ID を表す符号なし整数。 これは、
server_idシステム変数の値と同じです。例:
SERVER_ID="1" -
SQLTEXTSQL ステートメントのテキストを表す文字列。 この値は、空にすることができます。 長い値は、切り捨てられる可能性があります。 監査ログファイル自体などの文字列は、UTF-8 (1 文字当たり最大 4 バイト) を使用して記述されるため、この値が変換の結果となる場合があります。 たとえば、元のステートメントは、SJIS 文字列としてクライアントから受信された可能性があります。
例:
SQLTEXT="DELETE FROM t1" -
STARTUP_OPTIONSMySQL サーバーの起動時に、コマンド行またはオプションファイルで指定されたオプションを表す文字列。
例:
STARTUP_OPTIONS="--port=3306 --log_output=FILE" -
STATUSコマンドのステータスを表す符号なし整数 (成功した場合は 0、エラーが発生した場合はゼロ以外)。 これは、
mysql_errno()C API 関数の値と同じです。STATUSとの違いの詳細は、STATUS_CODEの説明を参照してください。監査ログには、SQLSTATE 値またはエラーメッセージが含まれていません。 エラーコード、SQLSTATE 値、およびメッセージ間の関連性を確認する方法については、Server Error Message Referenceを参照してください。
警告のログは記録されません。
例:
STATUS="1051" -
STATUS_CODEコマンドのステータスを表す符号なし整数 (成功した場合は 0、エラーが発生した場合は 1)。
STATUS_CODEの値は、STATUSの値とは異なります。STATUS_CODEは、成功した場合は 0、エラーが発生した場合は 1 であり、Audit Vault の EZ_collector コンシューマとの互換性があります。STATUSは、mysql_errno()C API 関数の値です。 これは、成功した場合は 0、エラーが発生した場合はゼロ以外です。そのため、エラーが発生した場合、必ずしも 1 であるとはかぎりません。例:
STATUS_CODE="0" -
TABLEテーブル名を表す文字列。
例:
TABLE="t3" -
USERクライアントによって送信されたユーザー名を表す文字列。 これは
PRIV_USERの値とは異なる場合があります。 -
VERSION監査ログファイル形式のバージョンを表す符号なし整数。
例:
VERSION="1"
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 バイト)。 監査ログプラグインは、新しいログファイルの書き込みを開始すると、開いている[アレイマーカーを書き込みます。 プラグインは、ログファイルを閉じるときに、閉じている]配列マーカーを書き込みます。 ファイルが開いている間は、閉じマーカーは存在しません。
監査レコード内の項目には、次の特性があります:
一部の項目は、すべての監査レコードに表示されます。 その他はオプションで、監査レコードタイプに応じて表示される場合があります。
監査レコード内の項目の順序は保証されません。
アイテム値が固定長ではありません。 長い値は、後で指定する品目摘要で示されるように切り捨てられる場合があります。
"および\の文字は、それぞれ"および\\としてエンコードされます。
次の例は、読みやすくするために若干再フォーマットされた様々なイベントタイプ (class および event 項目で示される) の JSON オブジェクト形式を示しています:
起動イベントの監査:
{ "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 は存在しません。
Connect または change-user イベント:
{ "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": "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.28 監査ログクラスとイベントの組合せ
クラス値 許可されたイベント値 auditstartup,shutdown接続connect,change_user,disconnectgeneralstatustable_access_dataread,delete,insert,update
-
connection_dataクライアント接続に関する情報。 値は、これらのアイテムを含むハッシュです:
connection_type,status,db、および場合によってはconnection_attributes。 この項目は、class値がconnectionの監査レコードに対してのみ発生します。例:
"connection_data": { "connection_type": "ssl", "status": 0, "db": "test" }MySQL 8.0.19 の時点では、
class値がconnectionでevent値がconnectのイベントには、接続時にクライアントによって渡された接続属性を表示するためのconnection_attributesアイテムが含まれる場合があります。 (「パフォーマンススキーマ」テーブルでも公開されるこれらの属性の詳細は、セクション27.12.9「パフォーマンススキーマ接続属性テーブル」 を参照してください。)connection_attributes値は、各属性をその名前と値で表すハッシュです。例:
"connection_attributes": { "_pid": "43236", "_os": "macos10.14", "_platform": "x86_64", "_client_version": "8.0.19", "_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 を表す符号なし整数。
例:
"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" } -
timestamp監査イベントが生成された日時を示す
YYYY-MM-DD hh:mm:ss形式の UTC 値を表す文字列。 たとえば、クライアントから受信した SQL ステートメントの実行に対応するイベントのtimestamp値は、受信時ではなく、ステートメントの終了後に発生します。例:
"timestamp": "2019-10-03 13:50:01"同じ
timestamp値を持つ監査レコードの場合、id値によってそれらが区別され、順序が形成されます。 監査ログ内では、timestamp/idのペアは一意です。 これらのペアは、ログ内のイベントの場所を識別するブックマークです。
JSON 形式の監査レコードのトップレベル項目に関連付けられたハッシュ値内には、次の項目が表示されます:
-
argsMySQL サーバーの起動時にコマンド行またはオプションファイルで指定されたオプションの配列。 最初のオプションは、サーバー実行可能ファイルへのパスです。
例:
"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": "localhost" -
ipクライアントの IP アドレスを表す文字列。
例:
"ip": "::1" -
mysql_versionMySQL サーバーのバージョンを表す文字列。 これは、セッション内の
VERSION()関数またはversionシステム変数の値と同じです。例:
"mysql_version": "5.7.21-log" -
os認証プロセス中に使用される外部ユーザー名を表す文字列。クライアントの認証に使用されるプラグインによって設定されます。 ネイティブ (組込み) MySQL 認証の場合、またはプラグインで値が設定されていない場合、この属性は空です。 この値は、
external_userシステム変数の値と同じです。 セクション6.2.18「プロキシユーザー」を参照してください。例:
"os": "jeffrey" -
os_versionサーバーが構築された、または実行されているオペレーティングシステムを表す文字列。
例:
"os_version": "i686-Linux" -
プロキシプロキシユーザーを表す文字列 (セクション6.2.18「プロキシユーザー」 を参照)。 ユーザーのプロキシ処理が有効になっていない場合は、値が空です。
例:
"proxy": "developer" -
クエリーSQL ステートメントのテキストを表す文字列。 この値は、空にすることができます。 長い値は、切り捨てられる可能性があります。 監査ログファイル自体などの文字列は、UTF-8 (1 文字当たり最大 4 バイト) を使用して記述されるため、この値が変換の結果となる場合があります。 たとえば、元のステートメントは、SJIS 文字列としてクライアントから受信された可能性があります。
例:
"query": "DELETE FROM t1" -
server_idサーバー ID を表す符号なし整数。 これは、
server_idシステム変数の値と同じです。例:
"server_id": 1 -
sql_commandSQL ステートメントのタイプを示す文字列。
例:
"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、エラーが発生した場合はゼロ以外)。 これは、
mysql_errno()C API 関数の値と同じです。監査ログには、SQLSTATE 値またはエラーメッセージが含まれていません。 エラーコード、SQLSTATE 値、およびメッセージ間の関連性を確認する方法については、Server Error Message Referenceを参照してください。
警告のログは記録されません。
例:
"status": 1051 -
tableテーブル名を表す文字列。
例:
"table": "t1" -
userユーザー名を表す文字列。 意味は、
userが発生するアイテムによって異なります:accountアイテム内のuserは、サーバーがクライアントを認証したユーザーを表す文字列です。 これは、サーバーが権限チェックに使用するユーザー名です。loginアイテム内のuserは、クライアントによって送信されるユーザー名を表す文字列です。
例:
"user": "root"