MySQL 8.0 リファレンスマニュアル


6.4.5.9 レガシーモード監査ログのフィルタリング

注記

このセクションでは、レガシー監査ログのフィルタリングについて説明します。このフィルタリングは、audit_log プラグインがインストールされているが、ルールベースのフィルタリングに必要な監査テーブルおよび UDF には付随しない場合に適用されます。

監査ログプラグインは、監査対象イベントをフィルタリングできます。 これにより、イベントの発生元またはイベントステータスに基づいて、監査イベントを監査ログファイルに書き込むかどうかを制御できます。 ステータスのフィルタリングは、接続イベントおよびステートメントイベントごとに個別に発生します。

アカウント別のイベントフィルタリング

元のアカウントに基づいて監査イベントをフィルタするには、サーバーの起動時または実行時に次のいずれかのシステム変数を設定します:

  • audit_log_include_accounts: 監査ロギングに含めるアカウント。 この変数が設定されている場合は、これらのアカウントのみが監査されます。

  • audit_log_exclude_accounts: 監査ロギングから除外するアカウント。 この変数が設定されている場合は、これらのアカウント以外がすべて監査されます。

いずれかの変数の値には、NULL またはカンマで区切った 1 つ以上のアカウント名を含む文字列を指定できます。それぞれの形式は user_name@host_name です。 デフォルトでは、両方の変数が NULL になっています。この場合、アカウントのフィルタリングは実行されず、すべてのアカウントで監査が発生します。

audit_log_include_accounts または audit_log_exclude_accounts の変更は、変更後に作成された接続にのみ影響し、既存の接続には影響しません。

例: user1 および user2 ローカルホストのアカウントでのみ監査ロギングを有効にするには、次のように audit_log_include_accounts システム変数を設定します。

SET GLOBAL audit_log_include_accounts = 'user1@localhost,user2@localhost';

同時に NULL 以外に設定できるのは、audit_log_include_accountsaudit_log_exclude_accounts のいずれかのみです。

  • audit_log_include_accounts を設定すると、サーバーは audit_log_exclude_accountsNULL に設定します。

  • audit_log_include_accountsNULL でない場合を除いて、audit_log_exclude_accounts を設定しようとするとエラーが発生します。 この場合は、まず audit_log_include_accountsNULL に設定することでクリアする必要があります。

-- This sets audit_log_exclude_accounts to NULL
SET GLOBAL audit_log_include_accounts = value;

-- This fails because audit_log_include_accounts is not NULL
SET GLOBAL audit_log_exclude_accounts = value;

-- To set audit_log_exclude_accounts, first set
-- audit_log_include_accounts to NULL
SET GLOBAL audit_log_include_accounts = NULL;
SET GLOBAL audit_log_exclude_accounts = value;

いずれかの変数の値を調査する場合は、SHOW VARIABLESNULL が空の文字列として表示されることに注意してください。 これを回避するには、代わりに SELECT を使用してください。

mysql> SHOW VARIABLES LIKE 'audit_log_include_accounts';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| audit_log_include_accounts |       |
+----------------------------+-------+
mysql> SELECT @@audit_log_include_accounts;
+------------------------------+
| @@audit_log_include_accounts |
+------------------------------+
| NULL                         |
+------------------------------+

カンマ、スペース、またはその他の特殊文字が含まれているために、ユーザー名やホスト名を引用符で囲む必要がある場合は、一重引用符を使用して囲みます。 変数の値自体が一重引用符で囲まれている場合は、内側の各一重引用符を二重に入力するか、バックスラッシュを使用してエスケープします。 次のステートメントはそれぞれ、ローカルの root アカウントの監査ロギングを有効にします。引用符のスタイルが異なりますが、いずれも同等です。

SET GLOBAL audit_log_include_accounts = 'root@localhost';
SET GLOBAL audit_log_include_accounts = '''root''@''localhost''';
SET GLOBAL audit_log_include_accounts = '\'root\'@\'localhost\'';
SET GLOBAL audit_log_include_accounts = "'root'@'localhost'";

ANSI_QUOTES SQL モードが有効な場合、最後のステートメントは機能しません。このモードでは、二重引用符は文字列引用符ではなく識別子引用符を示しているためです。

ステータス別のイベントフィルタリング

ステータスに基づいて監査イベントをフィルタするには、サーバーの起動時または実行時に次のシステム変数を設定します。 これらの変数は、レガシー監査ログのフィルタリングにのみ適用されます。 JSON 監査ログのフィルタリングについては、様々なステータス変数が適用されます。監査ログのオプションおよび変数 を参照してください。

  • audit_log_connection_policy: 接続イベントのロギングポリシーです

  • audit_log_statement_policy: ステートメントイベントのロギングポリシーです

各変数には、ALL (関連付けられたすべてのイベントのログを記録します。これがデフォルトです)、ERRORS (失敗したイベントのログのみを記録します)、または NONE (イベントのログを記録しません) の値が指定されます。 たとえば、ステートメントイベントのログはすべて記録するが、接続イベントのログは失敗したもののみを記録する場合は、次の設定を使用します。

SET GLOBAL audit_log_statement_policy = ALL;
SET GLOBAL audit_log_connection_policy = ERRORS;

別のポリシーシステム変数 audit_log_policy を使用できますが、audit_log_connection_policy および audit_log_statement_policy ほど制御できません。 それはサーバーの起動時にのみ設定できます。 実行時は、読み取り専用の変数です。 これには、ALL (すべてのイベントのログを記録します。これがデフォルトです)、LOGINS (接続イベントのログを記録します)、QUERIES (ステートメントイベントのログを記録します)、または NONE (イベントのログを記録しません) の値が指定されます。 これらの値のいずれを指定しても、監査ログプラグインは成功と失敗を区別せずに、選択したイベントのログをすべて記録します。 起動時の audit_log_policy の使用は、次のように動作します:

  • audit_log_policy を設定しない場合や、デフォルト値の ALL に設定した場合でも、audit_log_connection_policy または audit_log_statement_policy を明示的に設定すれば、指定どおりに適用されます。 指定しない場合は、デフォルトが ALL に設定されます。

  • audit_log_policyALL 以外の値に設定した場合は、次の表に示すように、その値が優先され、audit_log_connection_policy および audit_log_statement_policy を設定する際に使用されます。 また、これらの変数のいずれかをデフォルトの ALL 以外の値に設定する場合、サーバーはそれらの値がオーバーライドされることを示すメッセージをエラーログに書き込みます。

    起動時の audit_log_policy 値 結果として返される audit_log_connection_policy 値 結果として返される audit_log_statement_policy 値
    LOGINS ALL NONE
    QUERIES NONE ALL
    NONE NONE NONE

関連キーワード:  audit, 監査, accounts, イベント, 変数, 設定, ログ, アカウント, include, policy