Oracle 19c se2 audit dml 備忘録

chatGPTの回答をのせるだけ

---

データベース内のすべての表に対して監査を有効にする（`SELECT`、`INSERT`、`UPDATE`、`DELETE` 操作を記録する）には、Oracleでは一度にすべての表に対して `AUDIT` ステートメントを適用することはできません。なぜなら、Oracleでは一つの `AUDIT` ステートメントで全ての表を指定することがサポートされていないためです。しかし、スクリプトを作成し、データベース内の全ての表をループで巡回して、各表に個別に監査設定を適用することができます。

### **ステップ 1：すべての表に対する監査ステートメントを生成**

次の PL/SQL スクリプトを使用して、すべての表に対する監査を有効にするステートメントを生成し、実行することができます。

```sql
BEGIN
  FOR t IN (SELECT table_name, owner 
            FROM all_tables 
            WHERE owner NOT IN ('SYS', 'SYSTEM') -- システム表を除外
            AND owner = 'YOUR_SCHEMA') -- 特定のスキーマに対して実行したい場合
  LOOP
    EXECUTE IMMEDIATE 'AUDIT SELECT, INSERT, UPDATE, DELETE ON ' || t.owner || '.' || t.table_name || ' BY SESSION';
  END LOOP;
END;
/
```

### **ステップ 2：スクリプトを実行**

1. **条件の修正**：
   - 特定のスキーマ（例：`YOUR_SCHEMA`）内のすべての表に監査を適用したい場合は、`WHERE` 条項で `owner = 'YOUR_SCHEMA'` を指定します。
   - データベース全体のすべてのユーザ表に監査を適用したい場合は、`AND owner = 'YOUR_SCHEMA'` 条件を削除します。

2. **スクリプトを実行**：
   - スクリプトを SQL*Plus またはその他の SQL ツールで実行すると、Oracle は条件に一致する各表に対して監査命令を実行します。

### **注意点：**

1. **性能とスペース**：
   - `BY SESSION` を使用することで監査ログの量を減らすことができますが、データベース内に非常に多くの表があり、操作が頻繁に行われる場合、大量のログデータが生成される可能性があります。実施前に評価を行い、適切なスペース管理の戦略を設定することをお勧めします。

2. **定期的な監視と管理**：
   - 監査ログの増加を定期的に確認し、ストレージの不足を引き起こさないようにします。`DBMS_AUDIT_MGMT` パッケージを使用して監査ログを管理し、クリーンアップを実行することができます。

3. **段階的な有効化**：
   - データベース表が非常に多い場合、監査を段階的に有効にし、システムの性能への影響を監視することを検討します。

これらのステップに従うことで、データベース内のすべての表に対して、`SELECT`、`INSERT`、`UPDATE`、`DELETE` 操作の監査記録を効果的に有効にすることができます。



---

ご指摘の「統合監査」は、おそらく Oracle の**統一監査**（Unified Auditing）を指していると思われます。これは、Oracle 12c から導入された新しい監査フレームワークであり、Oracle 19c でさらに強化されています。**統一監査**は従来の監査と比較していくつかの利点があり、より効率的かつ包括的にデータベースの活動を管理および記録できるようになっています。これには、テーブルの最終使用時間も含まれます。

### **統一監査の利点：**

1. **統一監査ポリシー**：すべての監査関連機能を一つのフレームワークに統合し、監査の設定と管理を簡素化します。従来の監査、細粒度監査、その他の監査（SYS 操作監査など）も、一か所で設定と確認が可能です。

2. **監査記録の集中管理**：すべての監査記録が、統一監査記録表 `UNIFIED_AUDIT_TRAIL` に保存され、クエリや管理が容易になります。

3. **優れたパフォーマンス**：統一監査は、パフォーマンスとストレージ効率の最適化が図られており、従来の監査機能と比較してシステムへの影響が少なくなっています。

4. **多様な操作のサポート**：DML 操作（INSERT、UPDATE、DELETE）、DDL 操作（CREATE、ALTER、DROP）、SELECT クエリなど、ほぼすべてのデータベース活動を監査することが可能です。

### **統一監査を使用してテーブルの使用状況を監視する方法：**

#### 1. **統一監査の有効化**
Oracle 19c SE2 では、統一監査が通常デフォルトで有効になっています。もし有効でない場合、以下の手順で有効にできます（データベースの再起動が必要です）：

```sql
-- 統一監査が有効かどうかを確認
SHOW PARAMETER UNIFIED_AUDIT;

-- 無効の場合、有効化する（DBA 権限が必要）
ALTER SYSTEM SET UNIFIED_AUDIT_ENABLE=TRUE SCOPE=SPFILE;
```

データベースを再起動すると、統一監査が有効になります。

#### 2. **監査ポリシーの作成**

テーブルの使用状況を監視するための監査ポリシーを作成するには、以下の SQL 文を使用します（`SELECT`、`INSERT`、`UPDATE`、`DELETE` 操作を含む）：

```sql
-- 統一監査ポリシーを作成
CREATE AUDIT POLICY my_table_audit_policy
  ACTIONS SELECT, INSERT, UPDATE, DELETE ON SCHEMA.TABLE_NAME;

-- ポリシーをユーザーやロールに適用
AUDIT POLICY my_table_audit_policy BY USER my_user;
```

データベース内のすべてのテーブルに統一監査を適用したい場合は、ポリシーをスキーマ全体またはすべてのユーザーに適用できます：

```sql
-- スキーマ内のすべてのテーブルにポリシーを適用
AUDIT POLICY my_table_audit_policy BY SCHEMA my_schema;
```

#### 3. **監査記録の確認**

統一監査の記録は `UNIFIED_AUDIT_TRAIL` ビューに保存されます。以下のクエリを使用して監査記録を確認できます：

```sql
SELECT 
    EVENT_TIMESTAMP,
    DBUSERNAME,
    OBJECT_SCHEMA,
    OBJECT_NAME,
    ACTION_NAME,
    SQL_TEXT
FROM 
    UNIFIED_AUDIT_TRAIL
WHERE 
    OBJECT_TYPE = 'TABLE'
    AND OBJECT_NAME = 'YOUR_TABLE_NAME';
```

このクエリは、指定されたテーブルに対するすべての操作記録（操作のタイムスタンプ、ユーザー、SQL 文など）を返します。

### **まとめ：**
Oracle の統一監査（Unified Auditing）を使用することは、テーブルの使用状況を監視するためのより効率的で包括的なソリューションです。従来の監査機能と比較して、性能と管理面での利点があります。統一監査ポリシーを作成することで、すべてのテーブルに対する `SELECT`、`INSERT`、`UPDATE`、`DELETE` 操作を監査でき、`UNIFIED_AUDIT_TRAIL` ビューを使用してこれらの記録を集中管理およびクエリできます。