一連のフィルターを通じて、特定のイベントに対するセキュリティ監査を実現します。
機能の適用範囲
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity Editionは、現在監査機能をサポートしていません。
監査範囲
フィルターでフィルタリングできる次元には、アカウント、イベントタイプ、イベント属性などが含まれます。各フィルターでは、フィルタリングされたイベントを監査するかどうかを選択できます。
使用制限と注意事項
- 式は、
SELECTステートメントの出力列(select item)に直接かつ一意に配置する必要があり、親式(parent expr)の制限はありません。 - 式はサブクエリ内に記述できません。
- フィルターを定義した後、ユーザーに設定して初めて有効になります。
- フィルターとユーザーは1対多の関係です。つまり、1つのフィルターを複数のユーザーに設定できますが、1人のユーザーには1つのフィルターしか設定できません。
- 接続の確立時に、現在のセッションがどの監査フィルター(Audit Filter)を使用するかが決定され、その後のセッションのライフサイクル全体で変更されません。
フィルターの作成
フィルターを作成してMySQLテナントの監査モードを有効にします。フィルターは監査イベントタイプの選択的なフィルタリングをサポートしており、現在は「すべてのイベントを記録する」「すべてのイベントを記録しない」「ログインとログアウトのみを記録する」の3種類から選択できます。
構文
AUDIT_LOG_FILTER_SET_FILTER 関数(式)を使用してフィルターを作成します。コマンドは以下のとおりです:
AUDIT_LOG_FILTER_SET_FILTER('filter_name', 'definition_of_filters');
各フィールドの説明は以下のとおりです:
フィールド |
説明 |
|---|---|
| filter_name | フィルター名を指定するために使用します。
説明
|
| definition_of_filters | 監査フィルターの具体的な設定を定義するために使用し、JSON形式で表現します。現在のバージョンのフィルターデザインポリシーはMySQLと互換性がありますが、監査イベントタイプのフィルタリングのみをサポートしています。 |
現在、サポートされているフィルター設定のタイプは以下のとおりです:
すべてのイベントを記録します。
{ "filter": { "log": true } }または
{ "filter": { "log": true, "class": [ { "name": "connection" }, { "name": "general" }, { "name": "table_access" } ] } }すべてのイベントを記録しません。
{ "filter": { "log": false } }ログインとログアウトのみを記録します。
{ "filter": { "log": true, "class": [ { "name": "connection" } ] } }
監査イベントの分類は以下のとおりです:
イベントタイプ |
説明 |
|---|---|
| connection | ログイン/ログアウト。 |
| table_access | DMLステートメント。 |
| general | cmdステートメント、parser失敗。 |
例
すべてのイベントを記録するフィルター log_all を作成します。
obclient [test]>SELECT AUDIT_LOG_FILTER_SET_FILTER('log_all', '{ "filter": { "log": true } }');
DDLが正常に実行された場合、式は
OKを返します。+-------------------------------------------------------------------------+ | AUDIT_LOG_FILTER_SET_FILTER('log_all', '{ "filter": { "log": true } }') | +-------------------------------------------------------------------------+ | OK | +-------------------------------------------------------------------------+ 1 row in setDDLが失敗した場合、
SELECTステートメントは正常に実行されますが、式の出力結果はエラーメッセージとなります。obclient [test]>SELECT AUDIT_LOG_FILTER_SET_FILTER('log_err', '1');実行結果は次のとおりです:
+---------------------------------------------+ | AUDIT_LOG_FILTER_SET_FILTER('log_err', '1') | +---------------------------------------------+ | ERROR: JSON parsing error. | +---------------------------------------------+ 1 row in set
mysql.audit_log_filter ビューで監査フィルターの定義を確認します。
obclient [test]> select * from mysql.audit_log_filter;
実行結果は次のとおりです:
+---------+-------------------------------+
| NAME | FILTER |
+---------+-------------------------------+
| log_all | { "filter": { "log": true } } |
+---------+-------------------------------+
1 row in set (0.003 sec)
各フィールドの説明は以下のとおりです:
フィールド名 |
説明 |
|---|---|
| NAME | フィルター名 |
| FILTER | フィルター定義 |
フィルターの設定
フィルターを対応するユーザーに設定して初めて、バックグラウンドスレッドが監査ログを出力できます。
構文
AUDIT_LOG_FILTER_SET_USER 関数(式)を使用して、ユーザーにフィルターを設定します。
AUDIT_LOG_FILTER_SET_USER('user_name', 'filter_name');
各フィールドの説明は以下のとおりです:
フィールド |
説明 |
|---|---|
| user_name | ユーザー名を指定するために使用されます。
説明
|
| filter_name | フィルター名を指定するために使用されます。
説明
|
例
フィルター log_all をユーザー user001 に設定します。
obclient [test]> SELECT AUDIT_LOG_FILTER_SET_USER('user001', 'log_all');
DDLが正常に実行された場合、式は
OKを返します。+-------------------------------------------------+ | AUDIT_LOG_FILTER_SET_USER('user001', 'log_all') | +-------------------------------------------------+ | OK | +-------------------------------------------------+ 1 row in setDDLの実行が失敗した場合、
SELECTステートメントは正常に実行されますが、式の出力結果はエラーメッセージとなります。obclient [test]>SELECT AUDIT_LOG_FILTER_SET_USER('log_err', '1');実行結果は次のとおりです:
+--------------------------------------------+ | AUDIT_LOG_FILTER_SET_USER('log_err', '1') | +--------------------------------------------+ | ERROR: Invalid character in the user name. | +--------------------------------------------+ 1 row in set (0.001 sec)
mysql.audit_log_user ビューで監査フィルターとユーザーのマッピング関係を確認します。
obclient [test]> select * from mysql.audit_log_user;
実行結果は次のとおりです:
+---------+------+------------+
| USER | HOST | FILTERNAME |
+---------+------+------------+
| user001 | % | log_all |
+---------+------+------------+
1 row in set (0.003 sec)
各フィールドの説明は以下のとおりです:
フィールド名 |
説明 |
|---|---|
| USER | ユーザー名 |
| HOST | ホスト名 |
| FILTERNAME | フィルター名 |
監査の有効化
パラメータ audit_log_enable を使用して、MySQLテナント内の監査機能を有効にします。
obclient> ALTER SYSTEM SET audit_log_enable=TRUE;