Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


6.3.12.3 監査ログファイル

監査ログファイルの内容は暗号化されません。セクション6.3.12.2「監査ログプラグインのセキュリティーに関する考慮事項」を参照してください。

監査ログファイルは、UTF-8 (1 文字当たり最大 4 バイト) を使用した XML として記述されています。ルート要素は、<AUDIT> です。監査プラグインログの終了時に、ルート要素の終了タグ </AUDIT> が書き込まれます。そのため、このタグは、プラグインがアクティブになっている間はファイル内に存在しません。

ルート要素には、<AUDIT_RECORD> 要素が含まれています。この要素のそれぞれは、監査対象のイベントに関する情報を提供します。

MySQL 5.6.14 では、Oracle Audit Vault との互換性を高くするために、新しい監査ログファイルの形式が導入されました。audit_log_format システム変数を使用すれば、古い形式または新しい形式を選択できます。この変数では、OLD および NEW (デフォルトは OLD) の値が許可されています。

audit_log_format の値を変更する場合は、次の手順を使用して、ある形式のログエントリが別の形式のエントリを含む既存のログファイルに書き込まれることを回避します。

  1. サーバーを停止します。

  2. 現在の監査ログファイルの名前を手動で変更します。

  3. 新しい audit_log_format の値でサーバーを再起動します。監査ログプラグインによって、選択した形式のログエントリを含む新しいログファイルが作成されます。

次に、デフォルトの (古い) 形式のサンプルログファイルを示します。ただし、読みやすくするために形式が若干変更されています。

<?xml version="1.0" encoding="UTF-8"?>
<AUDIT>
  <AUDIT_RECORD
    TIMESTAMP="2012-08-02T14:52:12"
    NAME="Audit"
    SERVER_ID="1"
    VERSION="1"
    STARTUP_OPTIONS="--port=3306"
    OS_VERSION="i686-Linux"
    MYSQL_VERSION="5.6.10-log"/>
  <AUDIT_RECORD
    TIMESTAMP="2012-08-02T14:52:41"
    NAME="Connect"
    CONNECTION_ID="1"
    STATUS="0"
    USER="root"
    PRIV_USER="root"
    OS_LOGIN=""
    PROXY_USER=""
    HOST="localhost"
    IP="127.0.0.1"
    DB=""/>
  <AUDIT_RECORD
    TIMESTAMP="2012-08-02T14:53:45"
    NAME="Query"
    CONNECTION_ID="1"
    STATUS="0"
    SQLTEXT="INSERT INTO t1 () VALUES()"/>
  <AUDIT_RECORD
    TIMESTAMP="2012-08-02T14:53:51"
    NAME="Quit"
    CONNECTION_ID="1"
    STATUS="0"/>
  <AUDIT_RECORD
    TIMESTAMP="2012-08-06T14:21:03"
    NAME="NoAudit"
    SERVER_ID="1"/>
</AUDIT>

次に、新しい形式のサンプルログファイルを示します。ただし、読みやすくするために形式が若干変更されています。

<?xml version="1.0" encoding="UTF-8"?>
<AUDIT>
 <AUDIT_RECORD>
  <TIMESTAMP>2013-09-17T15:03:24 UTC</TIMESTAMP>
  <RECORD_ID>1_2013-09-17T15:03:24</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>x86_64-osx10.6</OS_VERSION>
  <MYSQL_VERSION>5.7.2-m12-log</MYSQL_VERSION>
 </AUDIT_RECORD>
 <AUDIT_RECORD>
  <TIMESTAMP>2013-09-17T15:03:40 UTC</TIMESTAMP>
  <RECORD_ID>2_2013-09-17T15:03:24</RECORD_ID>
  <NAME>Connect</NAME>
  <CONNECTION_ID>2</CONNECTION_ID>
  <STATUS>0</STATUS>
  <STATUS_CODE>0</STATUS_CODE>
  <USER>root</USER>
  <OS_LOGIN></OS_LOGIN>
  <HOST>localhost</HOST>
  <IP>127.0.0.1</IP>
  <COMMAND_CLASS>connect</COMMAND_CLASS>
  <PRIV_USER>root</PRIV_USER>
  <PROXY_USER></PROXY_USER>
  <DB>test</DB>
 </AUDIT_RECORD>

...

 <AUDIT_RECORD>
  <TIMESTAMP>2013-09-17T15:03:41 UTC</TIMESTAMP>
  <RECORD_ID>4_2013-09-17T15:03:24</RECORD_ID>
  <NAME>Query</NAME>
  <CONNECTION_ID>2</CONNECTION_ID>
  <STATUS>0</STATUS>
  <STATUS_CODE>0</STATUS_CODE>
  <USER>root[root] @ localhost [127.0.0.1]</USER>
  <OS_LOGIN></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>2013-09-17T15:03:41 UTC</TIMESTAMP>
  <RECORD_ID>5_2013-09-17T15:03:24</RECORD_ID>
  <NAME>Query</NAME>
  <CONNECTION_ID>2</CONNECTION_ID>
  <STATUS>0</STATUS>
  <STATUS_CODE>0</STATUS_CODE>
  <USER>root[root] @ localhost [127.0.0.1]</USER>
  <OS_LOGIN></OS_LOGIN>
  <HOST>localhost</HOST>
  <IP>127.0.0.1</IP>
  <COMMAND_CLASS>create_table</COMMAND_CLASS>
  <SQLTEXT>CREATE TABLE t (i INT)</SQLTEXT>
 </AUDIT_RECORD>

...

 <AUDIT_RECORD>
  <TIMESTAMP>2013-09-17T15:03:41 UTC</TIMESTAMP>
  <RECORD_ID>7_2013-09-17T15:03:24</RECORD_ID>
  <NAME>Quit</NAME>
  <CONNECTION_ID>2</CONNECTION_ID>
  <STATUS>0</STATUS>
  <STATUS_CODE>0</STATUS_CODE>
  <USER></USER>
  <OS_LOGIN></OS_LOGIN>
  <HOST></HOST>
  <IP></IP>
  <COMMAND_CLASS>connect</COMMAND_CLASS>
 </AUDIT_RECORD>

...

 <AUDIT_RECORD>
  <TIMESTAMP>2013-09-17T15:03:47 UTC</TIMESTAMP>
  <RECORD_ID>9_2013-09-17T15:03:24</RECORD_ID>
  <NAME>Shutdown</NAME>
  <CONNECTION_ID>3</CONNECTION_ID>
  <STATUS>0</STATUS>
  <STATUS_CODE>0</STATUS_CODE>
  <USER>root[root] @ localhost [127.0.0.1]</USER>
  <OS_LOGIN></OS_LOGIN>
  <HOST>localhost</HOST>
  <IP>127.0.0.1</IP>
  <COMMAND_CLASS></COMMAND_CLASS>
 </AUDIT_RECORD>
 <AUDIT_RECORD>
  <TIMESTAMP>2013-09-17T15:03:47 UTC</TIMESTAMP>
  <RECORD_ID>10_2013-09-17T15:03:24</RECORD_ID>
  <NAME>Quit</NAME>
  <CONNECTION_ID>3</CONNECTION_ID>
  <STATUS>0</STATUS>
  <STATUS_CODE>0</STATUS_CODE>
  <USER></USER>
  <OS_LOGIN></OS_LOGIN>
  <HOST></HOST>
  <IP></IP>
  <COMMAND_CLASS>connect</COMMAND_CLASS>
 </AUDIT_RECORD>
 <AUDIT_RECORD>
  <TIMESTAMP>2013-09-17T15:03:49 UTC</TIMESTAMP>
  <RECORD_ID>11_2013-09-17T15:03:24</RECORD_ID>
  <NAME>NoAudit</NAME>
  <SERVER_ID>1</SERVER_ID>
 </AUDIT_RECORD>
</AUDIT>

<AUDIT_RECORD> 要素の属性には、次のような特性があります。

  • 一部の属性はすべての要素に表示されますが、大部分はオプションであり、必ずしもすべての要素に表示されるとはかぎりません。

  • 要素内の属性の順序は保証されません。

  • 属性値は固定長ではありません。あとで属性の説明で示すように、長い値は切り捨てられる可能性があります。

  • <>"、および & 文字は、それぞれ &lt;&gt;&quot;、および &amp; としてエンコードされます。NUL バイト (U+00) は、? 文字としてエンコードされます。

  • XML 文字として有効でない文字は、数値の文字参照を使用してエンコードされます。有効な XML 文字は次のとおりです。

    #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
新しい監査ログファイル形式

すべての <AUDIT_RECORD> 要素には、必須の要素セットが含まれています。監査レコードのタイプに応じて、その他のオプションの要素が表示される場合もあります。

次の要素は、すべての <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

    指定可能な値は AuditBinlog DumpChange userClose stmtConnect OutConnectCreate DBDaemonDebugDelayed insertDrop DBExecuteFetchField ListInit DBKillLong DataNoAuditPingPrepareProcesslistQueryQuitRefreshRegister SlaveReset stmtSet optionShutdownSleepStatisticsTable DumpTime です。

    AuditNoAudit を除いて、これらの値は mysql_com.h ヘッダーファイルに一覧表示された COM_xxx コマンドの値に対応します。たとえば、Create DBShutdown は、それぞれ COM_CREATE_DBCOM_SHUTDOWN に対応します。

  • <RECORD_ID>

    監査レコードを表す一意の識別子。この値はシーケンス番号とタイムスタンプで構成され、形式は SEQ_TIMESTAMP です。シーケンス番号は、監査ログプラグインによって開かれ、レコードのログが記録されるたびに 1 ずつ増分されると、監査ログファイルのサイズに初期化されます。タイムスタンプは、監査ログプラグインによってファイルが開かれた時間を示す yyyy-mm-ddThh:mm:ss 形式の UTC 値です。

    例:

    <RECORD_ID>28743_2013-09-18T21:03:24</RECORD_ID>
  • <TIMESTAMP>

    監査イベントが生成された日付と時間。たとえば、クライアントから受信された SQL ステートメントの実行に対応するイベントでは、<TIMESTAMP> 値はステートメントが受信されたときではなく、終了したあとに生成されます。この値の形式は、yyyy-mm-ddThh:mm:ss UTC (T の場合は小数点不可) です。この形式の末尾には、タイムゾーン指定子が含まれています。現在、タイムゾーンは常に UTC です。

    例:

    <TIMESTAMP>2013-09-17T15:03:49 UTC</TIMESTAMP>

次の要素は、<AUDIT_RECORD> 要素ではオプションです。これらの多くは、特定の <NAME> 値でのみ発生します。

  • <COMMAND_CLASS>

    実行されたアクションのタイプを示す文字列。

    例:

    <COMMAND_CLASS>drop_table</COMMAND_CLASS>

    この値は、MySQL ソース配布の sql/mysqld.cc ファイル内の com_status_vars 配列から取得されます。これらは、このステートメントで表示されるステータス変数に対応します。

    SHOW STATUS LIKE 'Com%';
  • <CONNECTION_ID>

    クライアント接続識別子を表す符号なし整数。これは、セッション内の CONNECTION_ID() 関数の値と同じです。

    例:

    <CONNECTION_ID>127</CONNECTION_ID>
  • <DB>

    デフォルトのデータベース名を表す文字列。この要素は、<NAME> 値が Connect または Change user である場合にのみ表示されます。

  • <HOST>

    クライアントのホスト名を表す文字列。この要素は、<NAME> 値が ConnectChange user、または Query である場合にのみ表示されます。

    例:

    <HOST>localhost</HOST>
  • <IP>

    クライアントの IP アドレスを表す文字列。この要素は、<NAME> 値が ConnectChange user、または Query である場合にのみ表示されます。

    例:

    <IP>127.0.0.1</IP>
  • <MYSQL_VERSION>

    MySQL サーバーのバージョンを表す文字列。これは、セッション内の VERSION() 関数または version システム変数の値と同じです。この要素は、<NAME> 値が Audit である場合にのみ表示されます。

    例:

    <MYSQL_VERSION>5.7.1-m11-log</MYSQL_VERSION>
  • <OS_LOGIN>

    外部ユーザーを表す文字列 (none の場合は空です)。たとえば、サーバーが外部の認証方式を使用してクライアントを認証する場合は、この値が <USER> の値と異なる可能性があります。この要素は、<NAME> 値が ConnectChange user、または Query である場合にのみ表示されます。

  • <OS_VERSION>

    サーバーが構築された、または実行されているオペレーティングシステムを表す文字列。この要素は、<NAME> 値が Audit である場合にのみ表示されます。

    例:

    <OS_VERSION>x86_64-Linux</OS_VERSION>
  • <PRIV_USER>

    サーバーがクライアントを認証する際に使用したユーザーを表す文字列。これは、サーバーが権限チェックを行う際に使用するユーザー名であり、<USER> の値とは異なる可能性があります。この要素は、<NAME> 値が Connect または Change user である場合にのみ表示されます。

  • <PROXY_USER>

    プロキシユーザーを表す文字列。ユーザーのプロキシ処理が有効になっていない場合は、値が空です。この要素は、<NAME> 値が Connect または Change user である場合にのみ表示されます。

  • <SERVER_ID>

    サーバー ID を表す符号なし整数。これは、server_id システム変数の値と同じです。この要素は、<NAME> 値が Audit または NoAudit である場合にのみ表示されます。

    例:

    <SERVER_ID>1</SERVER_ID>
  • <SQLTEXT>

    SQL ステートメントのテキストを表す文字列。この値は、空にすることができます。長い値は、切り捨てられる可能性があります。この要素は、<NAME> 値が Query または Execute である場合にのみ表示されます。

    監査ログファイル自体などの文字列は、UTF-8 (1 文字当たり最大 4 バイト) を使用して記述されるため、この値が変換の結果となる場合があります。たとえば、元のステートメントは、SJIS 文字列としてクライアントから受信された可能性があります。

    例:

    <SQLTEXT>DELETE FROM t1</SQLTEXT>
  • <STARTUP_OPTIONS>

    MySQL サーバーの起動時に、コマンド行またはオプションファイルで指定されたオプションを表す文字列。この要素は、<NAME> 値が Audit である場合にのみ表示されます。

    例:

    <STARTUP_OPTIONS>/usr/local/mysql/bin/mysqld
      --port=3306 --log-output=FILE</STARTUP_OPTIONS>
  • <STATUS>

    コマンドのステータスを表す符号なし整数 (成功した場合は 0、エラーが発生した場合はゼロ以外)。これは、mysql_errno() C API 関数の値と同じです。

    監査ログには、SQLSTATE 値またはエラーメッセージが含まれていません。エラーコード、SQLSTATE 値、およびメッセージ間の関連性を確認する方法については、セクションB.3「サーバーのエラーコードおよびメッセージ」を参照してください。

    警告のログは記録されません。

    <STATUS> と異なる点については、<STATUS_CODE> の説明を参照してください。

    例:

    <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>
  • <USER>

    クライアントによって送信されたユーザー名を表す文字列。これは、<PRIV_USER> の値とは異なる可能性があります。この要素は、<NAME> 値が ConnectChange user、または Query である場合にのみ表示されます。

    例:

    <USER>root[root] @ localhost [127.0.0.1]</USER>
  • <VERSION>

    監査ログファイル形式のバージョンを表す符号なし整数。この要素は、<NAME> 値が Audit である場合にのみ表示されます。

    例:

    <VERSION>1</VERSION>
古い監査ログファイル形式

すべての <AUDIT_RECORD> 要素には、必須の属性セットが含まれています。監査レコードのタイプに応じて、その他のオプションの属性が表示される場合もあります。

次の属性は、すべての <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""Time" です。

    "Audit""NoAudit" を除いて、これらの値は mysql_com.h ヘッダーファイルに一覧表示された COM_xxx コマンドの値に対応します。たとえば、"Create DB""Shutdown" は、それぞれ COM_CREATE_DBCOM_SHUTDOWN に対応します。

  • TIMESTAMP

    監査イベントが生成された日付と時間。たとえば、クライアントから受信された SQL ステートメントの実行に対応するイベントでは、TIMESTAMP 値はステートメントが受信されたときではなく、終了したあとに生成されます。この値は、yyyy-mm-ddThh:mm:ss 形式 (T の場合は小数点不可) の UTC です。

    例: TIMESTAMP="2012-08-09T12:55:16"

次の属性は、<AUDIT_RECORD> 要素ではオプションです。これらの多くは、NAME 属性の特定の値を含む要素でのみ発生します。

  • CONNECTION_ID

    クライアント接続識別子を表す符号なし整数。これは、セッション内の CONNECTION_ID() 関数の値と同じです。

    例: CONNECTION_ID="127"

  • DB

    デフォルトのデータベース名を表す文字列。この属性は、NAME 値が "Connect" または "Change user" である場合にのみ表示されます。

  • HOST

    クライアントのホスト名を表す文字列。この属性は、NAME 値が "Connect" または "Change user" である場合にのみ表示されます。

    例: HOST="localhost"

  • IP

    クライアントの IP アドレスを表す文字列。この属性は、NAME 値が "Connect" または "Change user" である場合にのみ表示されます。

    例: IP="127.0.0.1"

  • MYSQL_VERSION

    MySQL サーバーのバージョンを表す文字列。これは、セッション内の VERSION() 関数または version システム変数の値と同じです。この属性は、NAME 値が "Audit" である場合にのみ表示されます。

    例: MYSQL_VERSION="5.6.11-log"

  • OS_LOGIN

    外部ユーザーを表す文字列 (none の場合は空です)。たとえば、サーバーが外部の認証方式を使用してクライアントを認証する場合は、この値が USER と異なる可能性があります。この属性は、NAME 値が "Connect" または "Change user" である場合にのみ表示されます。

  • OS_VERSION

    サーバーが構築された、または実行されているオペレーティングシステムを表す文字列。この属性は、NAME 値が "Audit" である場合にのみ表示されます。

    例: OS_VERSION="x86_64-Linux"

  • PRIV_USER

    サーバーがクライアントを認証する際に使用したユーザーを表す文字列。これは、サーバーが権限チェックを行う際に使用するユーザー名であり、USER の値とは異なる可能性があります。この属性は、NAME 値が "Connect" または "Change user" である場合にのみ表示されます。

  • PROXY_USER

    プロキシユーザーを表す文字列。ユーザーのプロキシ処理が有効になっていない場合は、値が空です。この属性は、NAME 値が "Connect" または "Change user" である場合にのみ表示されます。

  • SERVER_ID

    サーバー ID を表す符号なし整数。これは、server_id システム変数の値と同じです。この属性は、NAME 値が "Audit" または "NoAudit" である場合にのみ表示されます。

    例: SERVER_ID="1"

  • SQLTEXT

    SQL ステートメントのテキストを表す文字列。この値は、空にすることができます。長い値は、切り捨てられる可能性があります。この属性は、NAME 値が "Query" または "Execute" である場合にのみ表示されます。

    監査ログファイル自体などの文字列は、UTF-8 (1 文字当たり最大 4 バイト) を使用して記述されるため、この値が変換の結果となる場合があります。たとえば、元のステートメントは、SJIS 文字列としてクライアントから受信された可能性があります。

    例: SQLTEXT="DELETE FROM t1"

  • STARTUP_OPTIONS

    MySQL サーバーの起動時に、コマンド行またはオプションファイルで指定されたオプションを表す文字列。この属性は、NAME 値が "Audit" である場合にのみ表示されます。

    例: STARTUP_OPTIONS="--port=3306 --log-output=FILE"

  • STATUS

    コマンドのステータスを表す符号なし整数 (成功した場合は 0、エラーが発生した場合はゼロ以外)。これは、mysql_errno() C API 関数の値と同じです。

    監査ログには、SQLSTATE 値またはエラーメッセージが含まれていません。エラーコード、SQLSTATE 値、およびメッセージ間の関連性を確認する方法については、セクションB.3「サーバーのエラーコードおよびメッセージ」を参照してください。

    警告のログは記録されません。

    例: STATUS="1051"

  • USER

    クライアントによって送信されたユーザー名を表す文字列。これは、PRIV_USER の値とは異なる可能性があります。この属性は、NAME 値が "Connect" または "Change user" である場合にのみ表示されます。

  • VERSION

    監査ログファイル形式のバージョンを表す符号なし整数。この属性は、NAME 値が "Audit" である場合にのみ表示されます。

    例: VERSION="1"


User Comments
Sign Up Login You must be logged in to post a comment.