説明
この関数(式)は、フィルターを作成するために使用されます。
機能の適用範囲
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity Editionは、現在監査機能をサポートしていません。
構文
AUDIT_LOG_FILTER_SET_FILTER('filter_name', 'definition_of_filters');
説明
パラメータの説明
filter_name:フィルター名を指定するために使用されます。説明
AUDIT_LOG_FILTER_SET_FILTERはCREATE OR REPLACEのセマンティクスを持ち、既存のオブジェクトに対してDDLを実行すると上書きされます。definition_of_filters:監査フィルターの具体的な設定を定義するために使用され、JSON形式で表現されます。イベントタイプ(Class)の上で、イベントタイプの細分化(Event Type)、イベントフィールド(Event Field)、およびフィールド条件間のAND/ORの組み合わせを設定できます:- イベントタイプの細分化(Event Type):指定したイベントタイプをさらに細分化およびフィルタリングするために使用されます。JSON文字列では、
classの下のeventの下のnameパラメータを使用して関連フィールドを指定します。例:{"class": [{"name": "connection", "event": [{"name": "disconnect"}]}]}。 - イベントフィールド(Event Field)によるフィルタリング:イベントフィールドは、指定したイベントタイプをさらに細分化およびフィルタリングするために使用されます。
fieldパラメータを設定することで、connection、general、table_accessの3種類のイベントの具体的なフィールド(field)をフィルタリングできます。JSON文字列では、eventの下のlogパラメータを使用して関連フィールドを指定します。例:"event": [{"name": "read", "log": {"field": {"name": "table_name", "value": "t1"}}}]。 - 論理的組み合わせ:
AND/ORを使用して複数のfieldを論理的に組み合わせることができます。
- イベントタイプの細分化(Event Type):指定したイベントタイプをさらに細分化およびフィルタリングするために使用されます。JSON文字列では、
説明
イベントタイプの細分化、イベントフィールドによるフィルタリング、論理的組み合わせ演算は、V4.4.2 BP1バージョンからサポートされています。V4.4.2バージョンでは、イベントタイプのフィルタリングのみがサポートされています。
イベントタイプの細分化でサポートされているサブタイプ:
イベントタイプ(Class) |
説明 |
細分化可能なサブタイプ(Event Type) |
|---|---|---|
| connection | ログイン・ログアウト文を含む |
|
| general | すべての非DML文を含む |
|
| table_access | DMLにのみ使用可能 |
|
イベントフィールドのフィルタリングでサポートされているフィールド:
connection、general、table_accessの3つのイベントタイプが含まれ、各イベントタイプは複数のイベントフィールドをサポートしています。詳細は以下の表を参照してください:
イベントタイプ |
イベントフィールド(Event Field) |
データ型 |
説明 |
|---|---|---|---|
| connection | connection_id | Int | 接続の一意の識別子 |
| connection | user | String | 監査対象のログインユーザー名 |
| connection | database | String | 接続時に指定されたデータベース名 |
| connection | ip | String | 接続したユーザーが使用するクライアントIPアドレス |
| connection | server_ip | String | 接続先OBServerのサーバーIPアドレス |
| connection | server_host | String | 接続先OBServerのサーバーホスト名 |
| general | general_user | String | 監査対象のユーザー名 |
| general | general_sql_command | String | 監査対象の具体的なSQLタイプ。現在、すべての非DML文タイプ、DDL文(CREATE_TABLE、ALTER_USER、ALTER_SYSTEM_SET_PARAMETERなど)、その他のSQL文(SELECT、INSERT、UPDATE、DELETEなど)をカバーできます。 |
| table_access | table_database | String | イベントが属するデータベース名 |
| table_access | table_name | String | イベントに関連するテーブル。2つの使い方があります:
|
general_sql_commandがサポートする完全なSQLタイプについては、記事の最後にある関連ドキュメントを参照してください。
logフィールドの階層、違い、デフォルト動作
ログ記録動作は、logの値、およびclassまたはevent項目が指定されているかどうかによって決まります。
レベル |
値 |
説明 |
指定なし時の動作 |
|---|---|---|---|
filter.log |
true/false | フィルターの総合スイッチで、デフォルトでの記録/非記録を制御します。 | class または event が指定されていない場合、デフォルトで true として処理されます。 |
filter.class[].log |
true/false/JSON文字列 | 単一の class アイテムに対するローカルスイッチまたは条件フィルタリングです。 |
明示的に設定できます。設定されていない場合、上位レベルのルールに従って処理されます。 |
filter.class[].event[].log |
true/false/JSON文字列 | 単一の event アイテムに対するローカルスイッチまたは条件フィルタリングです。 |
明示的に設定できます。設定されていない場合、上位レベルのルールに従って処理されます。 |
その他の説明:
- 表のレベル列はパス表現の略称であり、以下のようになります:
filter.logはfilterオブジェクトのlogプロパティを表します。例:{"filter": {"log": true}}。filter.class[].logはfilterオブジェクトのclass配列内の単一要素のlogプロパティを表します。例:{"filter": {"class": [{"log": true}]}}。filter.class[].event[].logはfilterオブジェクトのclass配列内の単一要素のevent配列内の単一要素のlogプロパティを表します。例:{"filter":{"class":[{"name":"table_access","event":[{"name":"read","log":true}]}]}}。
- ドキュメントにおける「JSON外層
log」と「class/event層log」は重複設定ではありません。前者は総合スイッチ、後者はローカルオーバーライドまたは条件フィルタリングです。
一般的なフィルターのJSON表記
class を基盤として、上記の表に従ってイベントタイプ、イベントフィールド、論理組み合わせをさらに細分化できます。以下は一般的な表記方法です:
すべてのイベントを記録します。
{ "filter": { "log": true } }すべてのイベントを記録しません。
{ "filter": { "log": false } }ログイン・ログアウトのみを記録します(
connectionclassのみ)。{ "filter": { "log": true, "class": [ { "name": "connection" } ] } }すべてのclassを明示的にリストアップします(すべてのイベントを記録することと等価な表記方法の一つ)。
{ "filter": { "log": true, "class": [ { "name": "connection" }, { "name": "general" }, { "name": "table_access" } ] } }同じ階層の複数項目を配列にまとめることもできます(等価な表記方法):フィルター定義の同一レベルで、ある種類の項目が複数回現れ、値のみが異なる場合(例えば、複数の
class要素がそれぞれ異なるnameを持つ場合)、これらの値を同一項目の配列に統合し、1つのオブジェクトのみを保持します。{ "filter": { "log": true, "class": [ { "name": [ "connection", "general", "table_access" ] } ] } }
イベントタイプの詳細分類(Event Type)
connectionの下ではconnectのみを保持します(disconnectは含まれません)。{ "filter": { "log": true, "class": [ { "name": "connection", "event": [ { "name": "connect" } ] } ] } }event配列内の個々のイベントエントリには、logを明示的に含めることができ、そのエントリの条件を満たすイベントを記録するかどうかを指定します。以下の例では、同じtable_accessの下で複数のイベントタイプを選択し、各タイプごとに監査に書き込むかどうかを個別に指定しています。{ "filter": { "log": true, "class": [ { "name": "table_access", "event": [ { "name": "read", "log": false }, { "name": "insert", "log": true }, { "name": "delete", "log": true }, { "name": "update", "log": true } ] } ] } }
イベントフィールド(Event Field)と論理組み合わせ
connectionのconnectおよびdisconnectイベント、およびtable_accessのinsert、delete、updateイベントを記録します。{ "filter": { "log": true, "class": [ { "name": "connection", "event": [ { "name": "connect" }, { "name": "disconnect" } ] }, { "name": "general" }, { "name": "table_access", "event": [ { "name": "insert" }, { "name": "delete" }, { "name": "update" } ] } ] } }論理演算子
andおよびorをネストして複雑な条件を構築できます。以下のフィルターはgeneral/statusイベントに対して、log条件内で2組のandのいずれか一方を満たすイベントのみを記録します。1組目はgeneral_command.strがQueryに等しくgeneral_command.lengthが5に等しい場合、2組目はgeneral_command.strがExecuteに等しくgeneral_command.lengthが7に等しい場合です。{ "filter": { "class": { "name": "general", "event": { "name": "status", "log": { "or": [ { "and": [ { "field": { "name": "general_command.str", "value": "Query" } }, { "field": { "name": "general_command.length", "value": 5 } } ] }, { "and": [ { "field": { "name": "general_command.str", "value": "Execute" } }, { "field": { "name": "general_command.length", "value": 7 } } ] } ] } } } } }
戻り値
式の入力は文字列定数でなければならず、出力は文字列型です。
- DDLが正常に実行された場合、式は
OKを返します。 - DDLの実行に失敗した場合、
SELECTステートメントは正常に実行されますが、式の出力結果はエラーメッセージとなります。
例
すべてのイベントを記録するフィルター
log_allを作成します。SELECT AUDIT_LOG_FILTER_SET_FILTER('log_all', '{ "filter": { "log": true } }');実行結果は次のとおりです:
+-------------------------------------------------------------------------+ | AUDIT_LOG_FILTER_SET_FILTER('log_all', '{ "filter": { "log": true } }') | +-------------------------------------------------------------------------+ | OK | +-------------------------------------------------------------------------+ 1 row in setDDLが失敗した場合、
SELECTステートメントは正常に実行されますが、式の出力結果はエラーメッセージとなります。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
関連ドキュメント
general_sql_commandステートメントタイプ一覧:付録:general_sql_commandがサポートする完全なSQLタイプ- セキュリティ監査の有効化