このセクションでは、レガシー監査ログのフィルタリングについて説明します。このフィルタリングは、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_accounts
と audit_log_exclude_accounts
のいずれかのみです。
audit_log_include_accounts
を設定すると、サーバーはaudit_log_exclude_accounts
をNULL
に設定します。audit_log_include_accounts
がNULL
でない場合を除いて、audit_log_exclude_accounts
を設定しようとするとエラーが発生します。 この場合は、まずaudit_log_include_accounts
をNULL
に設定することでクリアする必要があります。
-- 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 VARIABLES
で NULL
が空の文字列として表示されることに注意してください。 これを回避するには、代わりに 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_policy
をALL
以外の値に設定した場合は、次の表に示すように、その値が優先され、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