Oracle Database セキュリティ強化 (アセスメント、ネットワーク、TLS、認証、権限、Unified Auditing、TDE)
Oracleレベル: 上級所要時間: 5 分 (アセスメント) ~ 4 時間 (完全な強化)インストール・ガイドではありません。稼働中の Oracle 19c / 23ai (26ai) データベース (シングル・インスタンス、Oracle Restart または RAC、CDB/PDB) のセキュリティ上の不備を見つけて解消します。まず読み取り専用のセキュリティ・アセスメントが検出事項を重大度順に一覧表示し、各項目がどのカードにつながるかを示します。その後、各領域を個別に、またはすべてを順に対処します: リスナーと TCP.VALIDNODE_CHECKING、ファイアウォール、TCPS (wallet) またはネイティブ・ネットワーク暗号化、12C パスワード・ベリファイアとプロファイル、デフォルト・アカウントのロック、ロール設計と PUBLIC からの UTL_* 権限の取消し、Unified Auditing と AUDSYS のクリーンアップ、TDE、バックアップの暗号化、OS、RU の追跡。TDE と RMAN/Data Pump の暗号化には Advanced Security ライセンスが必要です。それ以外はすべてライセンス不要です。最後にアセスメントを再実行します。
構成: シングル・インスタンス / Oracle Restart / RAC (2~8 ノード)、CDB + PDB、アプリケーション・サーバー (クライアント側の確認)
シナリオ
- セキュリティ・アセスメント: 不備はどこにあるか (読み取り専用) — 最初に実行するスキャン: デフォルト・パスワードのアカウントとオープンなアカウント、古いパスワード・ベリファイア、プロファイル、DBA/ANY 権限、PUBLIC に付与された UTL_ PL/SQL パッケージ、監査、TDE、暗号化されていないセッション、リスナーとファイルの権限。何も変更しません。
- 完全な強化 (全領域を順に) — 新規インストール直後、または一度も強化していないデータベース: 全領域を安全な順序で適用します。リスナーとデータベースを 1~2 回再起動します (メンテナンス・ウィンドウが必要)。
- ネットワークと接続: 誰がどこから接続できるか (リスナー、TCP.VALIDNODE_CHECKING、ファイアウォール) — リスナーがすべてのアドレスに開いている、invited nodes が未定義、1521/5500 が誰にでも開いている。リスナーを再起動します (既存のセッションには影響しません)。
- 接続を暗号化する (TCPS wallet またはネイティブ・ネットワーク暗号化) — ネットワーク・トラフィックが暗号化されていない。TLS (TCPS、wallet、証明書、クライアント側の SSL_SERVER_DN_MATCH) または証明書不要のネイティブ暗号化 (SQLNET.ENCRYPTION_SERVER=REQUIRED)。どちらもライセンス不要です。リスナーを再起動しますが、既存のセッションには影響しません。
- 認証とパスワード (12C ベリファイア、プロファイル、デフォルト・アカウント) — 10G/11G パスワード・ベリファイア、パスワード・プロファイルなし、デフォルト・パスワードのアカウントやサンプル・アカウントがオープン、個人用 DBA アカウント。停止時間なし。
- 最小権限: ロール、PUBLIC、アプリケーション・アカウント — アプリケーション・アカウントに DBA/RESOURCE/ANY 権限、PUBLIC に付与された UTL_FILE/UTL_TCP/UTL_HTTP。スキーマ所有者、読取り/書込みロール、権限レポート。停止時間なし。
- 監査: 誰が何をしたか (Unified Auditing、AUDSYS のクリーンアップ) — 監査担当者がログオン、アカウント変更、スキーマ変更の記録を求めている。Unified Audit ポリシー、保存期間に従った AUDSYS のパージ、syslog / 集中サーバーへの記録の転送。Unified Auditing はライセンス不要です。
- 保存データを暗号化する (TDE) — データファイル、バックアップ、ディスクのコピーを読み取られることへの対策としての TDE: WALLET_ROOT、キーストア、マスター暗号化鍵、表領域の暗号化 (オンライン)。Advanced Security ライセンスが必要です。WALLET_ROOT のために 1 回再起動します。
- バックアップのセキュリティ (RMAN 暗号化、パスワードなしの自動化、権限) — RMAN/Data Pump のバックアップが暗号化されていない、スクリプトに平文のパスワード、バックアップ・ディレクトリを誰でも読める。RMAN 暗号化、ENCRYPTION_PWD_PROMPT、wallet (SEPS)、ディレクトリの権限。RMAN と Data Pump の暗号化には Advanced Security ライセンスが必要です。
- OS 側 (oracle アカウント、ファイル権限、コア・ダンプ、SELinux) — oracle アカウントにパスワードがありログインできる、パスワード・ファイル / network admin / wallet の権限が緩い、SELinux が無効。コア・ダンプの制限は新しいセッション / 再起動後に有効になります。
- パッチとバージョン: 最新の RU を適用しているか — インストール済みの RU、datapatch の状態、サポート期間。適用には RU パッチ・ガイドを参照します。読み取り専用。
開始前の確認
- oracle ユーザーのプロファイルに ORACLE_HOME=…、ORACLE_SID… (各ノードのインスタンス名)…、PATH が定義されており、sqlplus / as sysdba がパスワードなし (OS 認証) で動作する。各手順は sudo -iu oracle のログイン・シェルで実行されるため、プロファイルが読み込まれます。… リスナーは Grid Infrastructure ホーム (…) から … で管理します。… 出力の非 ASCII 文字が ? と表示される場合は、プロファイルに export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 を追加してください (表示のみに影響し、データには影響しません)。
- サーバー上で2 つのセッションを開いており、一方で sqlplus / as sysdba を開いたままにしている。ローカルの / as sysdba (bequeath) 接続は、リスナー、sqlnet.ora のネットワーク・ルール、プロファイルの影響を受けません。リスナー、invited nodes、暗号化のエラー時には、常にこれが元に戻すための経路になります。アクセスを制限する各手順の後、別のセッションで (アプリケーション・サーバーから) 新しい接続をテストしてください。
- メンテナンス・ウィンドウ: リスナーを再起動します (新しい接続は数秒間拒否されますが、既存のセッションには影響しません)…。TDE 用の WALLET_ROOT と監査用の UNIFIED_AUDIT_SYSTEMLOG は静的パラメータのため、データベースの再起動が必要です…。… RAC では、データベースの再起動をノードごと (ローリング) に行えます: srvctl stop instance -db … -node <node> / start。…
- TDE、RMAN バックアップの暗号化、Data Pump の暗号化には Oracle Advanced Security ライセンスが必要です (Enterprise Edition + オプション・ライセンス。Oracle Cloud / Exadata Cloud では含まれる)。ライセンスがない場合はこれらの手順を適用せず、ディスク・レベルの暗号化 (LUKS) またはストレージの暗号化を使用してください。一方、ネイティブ・ネットワーク暗号化と TLS は全エディションでライセンス不要です (11gR2 以降)。
- データベースに接続するアプリケーション、Data Guard/OEM/バックアップ・サーバーのアドレス、クライアントのバージョンの一覧。アセスメントの手順で現在のセッションが表示されます。
- 最新で、リストアをテスト済みの RMAN バックアップがある (RMAN バックアップ戦略)。TDE 導入前のバックアップはキーストアなしで開けますが、TDE 導入後の新しいバックアップは、キーストアのバックアップがなければ開けません。
ガイドのフェーズ
- セキュリティ・アセスメント (読み取り専用) — データベース内部の検出事項を一覧表示する · OS と Net 側をチェックする
- 開始前: フォールバック・ポイント — Net ファイルとパラメータを保存する · ユーザー、プロファイル、権限をダンプする
- 権限 — 1. 診断 — アプリケーション・アカウントの権限と PUBLIC に付与された PL/SQL パッケージを表示する
- 権限 — 2. セーフティ・ネット — PUBLIC への付与に依存するオブジェクトを見つける
- 権限 — 3. 適用 — スキーマ所有者、ロール、アカウントを作成する · ロールに表の権限を付与する · アプリケーション・アカウントから過剰な権限を取り消す · PUBLIC から UTL_* と危険な PL/SQL パッケージの権限を取り消す · 権限レポート
- 権限 — 4. 検証 — アプリケーション・アカウントの有効な権限を検証する · アプリケーション・サーバーからの DDL の試行
- 認証 — 1. 診断 — アカウントの状態、ベリファイア、プロファイルを表示する
- 認証 — 2. セーフティ・ネット — クライアントのバージョンを確認する
- 認証 — 3. 適用 — デフォルト・パスワードの Oracle アカウント、サンプル・アカウント、未使用のアカウントをロックする · パスワード・プロファイルを作成する · CDB ルートの DEFAULT プロファイルを強化する · 12C パスワード・ベリファイアを強制する (sqlnet.ora) · アプリケーション・アカウントのパスワードを設定する · 個人用 DBA アカウントを作成する …
- 認証 — 4. 検証 — アカウントとベリファイアの状態を検証する · アプリケーション・サーバーからログインをテストする (新しいセッション)
- ネットワーク暗号化 — 1. 診断 — セッションの暗号化状態を表示する
- ネットワーク暗号化 — 3. 適用 — ネイティブ・ネットワーク暗号化を必須にする · サーバーの wallet を作成する · CA から返された証明書を wallet に追加する · wallet をリスナー所有者に開放する…、ほかのノードへコピーする… · リスナー用の TLS 設定を書き込む · データベース・ホーム用の TLS 設定を書き込む …
- ネットワーク暗号化 — 4. 検証 — 新しい接続が暗号化されていることを検証する
- ネットワーク暗号化 — 5. 事後作業 — 暗号化されていない 1521 の閉鎖と証明書の更新
- ネットワーク — 1. 診断: 誰がどこから接続しているか — リスナーと接続元を表示する
- ネットワーク — 3. 適用 — リスナーが許可されたアドレスのみを受け入れるようにする (valid node checking) · リスナーを再起動する · ファイアウォールでポートを許可されたネットワークのみに開放する
- ネットワーク — 4. 検証 — アプリケーション・サーバーから接続をテストする (新しいセッション)
- 監査 — 1. 診断 — 監査モード、ポリシー、AUDSYS のサイズを表示する
- 監査 — 3. 適用 — 監査ポリシーを定義して有効化する · AUDSYS を別の表領域に移動し、パージをスケジュールする · CDB ルートで事前定義ポリシーとパージを有効化する · 監査の要約を syslog に出力する (UNIFIED_AUDIT_SYSTEMLOG) · rsyslog: local3 を集中サーバーへ転送する · rsyslog とデータベースを再起動する
- 監査 — 4. 検証 — 変更を行ってレコードを確認する
- OS — 1. 診断 — oracle アカウント、ファイル権限、コア・ダンプ、SELinux
- OS — 3. 適用 — oracle アカウントのパスワードをロックする · パスワード・ファイルと Net ファイルの権限を修正する · oracle ユーザーのコア・ダンプを無効にする · SELinux を Enforcing に保つ
- OS — 4. 検証 — 変更を検証する
- TDE — 1. 診断 — キーストアと表領域の暗号化状態を表示する
- TDE — 2. セーフティ・ネット — TDE 前のバックアップと空き容量の確認
- TDE — 3. 適用 — WALLET_ROOT を設定する · WALLET_ROOT のためにデータベースを再起動する · キーストアを作成してオープンし、マスター暗号化鍵を設定する · キーストアをほかの RAC ノードへコピーする · 表領域を暗号化する · キーストアをバックアップする
- TDE — 4. 検証 — キーストアと暗号化された表領域を検証する
- バックアップ — 1. 診断 — RMAN の暗号化設定とバックアップの状態を表示する
- バックアップ — 3. 適用 — RMAN バックアップの暗号化を有効にする · 暗号化されたバックアップをテストする · Data Pump のエクスポートを暗号化する · スクリプト用のパスワードなし接続 (Secure External Password Store) · バックアップと wallet のディレクトリ権限を修正する
- パッチとバージョン — 1. 診断 — インストール済みの RU と datapatch の状態を表示する