セキュリティ監査を有効にした後、ユーザーの操作を監査するために具体的なセキュリティ監査ルールを設定する必要があります。
監査ルールの設定
ORAAUDITOR ユーザーでOracleテナントにログインします。組み込みの監査管理ユーザー ORAAUDITOR を使用して、以下の監査ルールを設定できます。
- ステートメント監査:特定の操作を監査します。具体的なオブジェクトは指定せず、特定のユーザーまたはすべてのユーザーに適用するかどうかを指定できます。
- オブジェクト監査:特定のオブジェクト上で実行される特定の操作を監査します。特定のユーザーまたはすべてのユーザーに適用するかどうかを指定できます。
監査ルールはDDLステートメント audit/noaudit で設定され、監査ルール自体もスキーマオブジェクトです。
監査ルールの設定に関する詳細は、AUDITを参照してください。
例えば、ユーザー user1 のテーブル tbl1 に対するすべてのINSERT、UPDATE、DELETE操作を監査します:
obclient> AUDIT INSERT,UPDATE,DELETE ON user1.tbl1;
監査ルールの確認
監査ルールを設定した後、一連のOracle互換データディクショナリビューを使用して監査ルールの情報を確認できます。
ディクショナリビュー |
機能説明 |
|---|---|
| ALL_DEF_AUDIT_OPTS | 新規作成された任意のオブジェクトのデフォルト監査ルールを記録します。各列の値は以下のとおりです:
|
| DBA_STMT_AUDIT_OPTS | ステートメントレベルの監査の詳細な設定を記録します。 |
| DBA_OBJ_AUDIT_OPTS | オブジェクトレベルの監査の詳細な設定を記録します。 |
ALL_DEF_AUDIT_OPTS の監査ルールを確認します。例:
obclient> SELECT * FROM SYS.ALL_DEF_AUDIT_OPTS;
監査ログの暗号化の設定(オプション)
説明
この機能はV4.4.2 BP2バージョンから導入され、監査レコードをディスクファイルに書き込むシナリオ(audit_trailがLOGの場合)にのみ適用されます。
Oracleテナントは監査ログの暗号化ストレージをサポートしています。暗号化を有効にすると、アーカイブされたログファイルをキー識別子ごとにディスクに保存でき、圧縮、ローテーション、クリーンアップなどのポリシーと組み合わせて使用しやすくなります。以下の手順を参考に、必要に応じて順次操作してください。
ログ暗号化機能の有効化
パラメータ audit_log_encryption を使用して、監査ログの暗号化を有効にするかどうかを制御します。取り得る値は以下のとおりです:
NONE:暗号化を有効にしません。デフォルト値です。AES:暗号化を有効にします。アルゴリズムはAES-256-CBCのストリーム暗号化です(アーカイブ書き込みプロセスでストリームを暗号化します)。
例えば、現在のテナントで監査ログの暗号化を有効にするには:
obclient> ALTER SYSTEM SET audit_log_encryption='AES';
パラメータの詳細な説明については、記事の最後にある関連ドキュメントを参照してください。
ログアーカイブとパスワード生成
以下の関数を呼び出すことで、ログアーカイブとパスワード生成を実装します。この関数は SELECT の出力列として直接呼び出す必要があります(サブクエリ内では使用できません)。AUDIT/NOAUDIT 構文ではありません:
AUDIT_LOG_ENCRYPTION_PASSWORD_SET():パラメータなし。現在書き込み中の監査ログのアーカイブをトリガーし、新しい暗号化キーを生成します。今後新しく生成されるアーカイブファイルは、この新しいキーで暗号化されます。関数の詳細な説明については、記事の最後にある関連ドキュメントを参照してください。
注意
この関数を使用するには、SUPER 権限が必要です。
例:
obclient> SELECT AUDIT_LOG_ENCRYPTION_PASSWORD_SET() FROM DUAL;
注意
audit_log_encryption パラメータが有効で、かつこの手順が正常に実行された場合にのみ、アーカイブされた監査ログファイルは暗号化されて保存されます。
ログパスワードの取得
以下の関数を呼び出して、ログファイルの暗号化パスワードを取得します:
AUDIT_LOG_ENCRYPTION_PASSWORD_GET(pwd_id):パラメータpwd_idはInt型で、ログファイルのタイムスタンプ接尾辞を表します。ログファイルのタイムスタンプ接尾辞に基づいて、対応するアーカイブログファイルの暗号化パスワードを返します。パラメータを指定しない場合、最新のpwd_idに対応するパスワードを取得します。関数の詳細な説明については、記事の最後にある関連ドキュメントを参照してください。
説明
この関数を使用するには、SUPER 権限が必要です。
最新のアーカイブログの暗号化パスワードを取得します:
obclient> SELECT AUDIT_LOG_ENCRYPTION_PASSWORD_GET() FROM DUAL;
指定されたログの暗号化パスワードを取得します:
obclient> SELECT AUDIT_LOG_ENCRYPTION_PASSWORD_GET('1682089200') FROM DUAL;
ログの復号化
監査ログの暗号化は、OpenSSLが提供するインターフェースを使用します。OpenSSLでログファイルを暗号化または復号化するには、keyとiv、またはpasswordを指定する必要があります。コマンドの例は以下のとおりです:
# -d は復号化を意味します。
# -aes-256-cbc は AES-256-CBC アルゴリズムの使用を意味します。
# -pass pass:password は password をパスワードとして使用することを意味します。
# -md sha256 は SHA-256 アルゴリズムの使用を意味します。
# -in encrypted_log_file は暗号化されたログファイルの入力を意味します。
# -out decrypted_file は復号化されたログファイルの出力を意味します。
obclient > openssl enc -d -aes-256-cbc -pass pass:password -md sha256 -in encrypted_log_file -out decrypted_file
付録:ログファイル名形式の説明
アーカイブ後の監査ログファイル名は、タイムスタンプのサフィックスに基づき、圧縮と暗号化の有無に応じて、規定のフラグメント(pwd_idはキー識別子で、ビューおよび関数パラメータに対応します)を追加します:
シナリオ |
ファイル名形式 |
|---|---|
| 圧縮なし、暗号化なし | audit.log.timestamp |
| 圧縮のみ | audit.log.timestamp.zst |
| 暗号化のみ | audit.log.timestamp.enc.pwd_id |
| 圧縮と暗号化 | audit.log.timestamp.zst.enc.pwd_id |
ここで、timestampはアーカイブファイル名のタイムスタンプサフィックスです。圧縮を同時に有効にした場合、圧縮の拡張子は設定と実装によって異なります(現在の圧縮アルゴリズムがZSTDの場合は.zstに対応します)。
関連ドキュメント
セキュリティ監査に関するその他の操作については、以下を参照してください:
- セキュリティ監査の有効化
- 監査レコードの表示
- ログ暗号化の設定:audit_log_encryption
- ログアーカイブと復号化の設定関数:AUDIT_LOG_ENCRYPTION_PASSWORD_SET
- ログアーカイブと復号化のクエリ関数:AUDIT_LOG_ENCRYPTION_PASSWORD_GET
- 監査関数の概要