このページは機械翻訳したものです。
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_
コマンド値に対応しています。 たとえば、xxx
Create 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-DD
Thh:mm:ss
例:
<RECORD_ID>12_2019-10-03T14:06:33</RECORD_ID>
-
<TIMESTAMP>
監査イベントが生成された日時を示す
形式の UTC 値を表す文字列。 たとえば、クライアントから受信した SQL ステートメントの実行に対応するイベントのYYYY-MM-DD
Thh:mm:ss
UTC<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>
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
のXXX
NAME
値を持つイベントには、Query
イベントが付随します。 たとえば、次のステートメントは、1 つのQuery
イベント、2 つのTableRead
イベントおよびTableInsert
イベントを生成します:INSERT INTO t3 SELECT t1.* FROM t1 JOIN t2;
各
Table
イベントには、イベントが参照するテーブルを識別するためのXXX
DB
およびTABLE
属性があります。古い形式の XML 監査ログ形式の
Connect
イベントには、接続属性は含まれません。 -
RECORD_ID
監査レコードを表す一意の識別子。 この値はシーケンス番号とタイムスタンプで構成され、形式は
です。 監査ログプラグインが監査ログファイルを開くと、順序番号が監査ログファイルのサイズに初期化され、記録されるレコードごとに順序が 1 ずつ増分されます。 タイムスタンプは、監査ログプラグインがファイルを開いた日時を示すSEQ_TIMESTAMP
形式の UTC 値です。YYYY-MM-DD
Thh:mm:ss
例:
RECORD_ID="12_2019-10-03T14:25:00"
-
TIMESTAMP
監査イベントが生成された日時を示す
形式の UTC 値を表す文字列。 たとえば、クライアントから受信した SQL ステートメントの実行に対応するイベントのYYYY-MM-DD
Thh:mm:ss
UTCTIMESTAMP
値は、受信時ではなく、ステートメントの終了後に発生します。例:
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.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"
-
SQLTEXT
SQL ステートメントのテキストを表す文字列。 この値は、空にすることができます。 長い値は、切り捨てられる可能性があります。 監査ログファイル自体などの文字列は、UTF-8 (1 文字当たり最大 4 バイト) を使用して記述されるため、この値が変換の結果となる場合があります。 たとえば、元のステートメントは、SJIS 文字列としてクライアントから受信された可能性があります。
例:
SQLTEXT="DELETE FROM t1"
-
STARTUP_OPTIONS
MySQL サーバーの起動時に、コマンド行またはオプションファイルで指定されたオプションを表す文字列。
例:
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 監査ログクラスとイベントの組合せ
クラス値 許可されたイベント値 audit
startup
,shutdown
接続
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" }
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 形式の監査レコードのトップレベル項目に関連付けられたハッシュ値内には、次の項目が表示されます:
-
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": "localhost"
-
ip
クライアントの IP アドレスを表す文字列。
例:
"ip": "::1"
-
mysql_version
MySQL サーバーのバージョンを表す文字列。 これは、セッション内の
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_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、エラーが発生した場合はゼロ以外)。 これは、
mysql_errno()
C API 関数の値と同じです。監査ログには、SQLSTATE 値またはエラーメッセージが含まれていません。 エラーコード、SQLSTATE 値、およびメッセージ間の関連性を確認する方法については、Server Error Message Referenceを参照してください。
警告のログは記録されません。
例:
"status": 1051
-
table
テーブル名を表す文字列。
例:
"table": "t1"
-
user
ユーザー名を表す文字列。 意味は、
user
が発生するアイテムによって異なります:account
アイテム内のuser
は、サーバーがクライアントを認証したユーザーを表す文字列です。 これは、サーバーが権限チェックに使用するユーザー名です。login
アイテム内のuser
は、クライアントによって送信されるユーザー名を表す文字列です。
例:
"user": "root"