Data Pump(expdp)で出力されるダンプファイル(.dmp)には、テーブルデータ・DDL・パスワードハッシュなどデータベースの重要情報が含まれています。このファイルが外部に流出すると情報漏洩に直結するため、セキュリティ対策としてファイルの暗号化が推奨されます。
本記事では、ENCRYPTION_PASSWORD によるパスワード暗号化の基本から、ENCRYPTION の 5 つのモード、ENCRYPTION_ALGORITHM(AES128 / 192 / 256)、Oracle Wallet(TDE)との連携、impdp での復号手順、そしてパスワードの安全な管理方法まで解説します。
・ENCRYPTION_PASSWORD でダンプファイルをパスワード暗号化する方法
・ENCRYPTION の 5 モード(ALL / DATA_ONLY / ENCRYPTED_COLUMNS_ONLY / METADATA_ONLY / NONE)
・ENCRYPTION_ALGORITHM(AES128 / AES192 / AES256)の選び方
・Oracle Wallet(TDE)と連携した暗号化
・impdp で暗号化ダンプを復号してインポートする方法
・parfile でパスワードを安全に管理する方法
・ファイル暗号化の限界と TDE との比較
ENCRYPTION_PASSWORD で暗号化する(基本)
# ダンプファイルをパスワードで暗号化してエクスポート
expdp hr/password \
directory=DP_DIR \
dumpfile=hr_encrypted.dmp \
logfile=hr_encrypted.log \
schemas=HR \
encryption_password=MySecretPass123
# デフォルトでは ENCRYPTION=ALL(全データ暗号化)が適用される
# デフォルトのアルゴリズムは AES128
# インポート時に同じパスワードを指定
impdp hr/password \
directory=DP_DIR \
dumpfile=hr_encrypted.dmp \
logfile=hr_import.log \
schemas=HR \
encryption_password=MySecretPass123
# パスワードが一致しないと ORA-39174 エラーが発生する
パスワードを紛失した場合、暗号化されたダンプファイルは二度とインポートできません。Oracle サポートでも復旧はできないため、パスワードは安全な場所に記録・管理してください。
ENCRYPTION パラメータの 5 つのモード
| モード | 暗号化対象 | 用途 |
|---|---|---|
| ALL(デフォルト) | メタデータ(DDL)+ データの両方 | 最も安全。全体を暗号化したい場合 |
| DATA_ONLY | テーブルデータのみ | DDL は平文で残したいが、データは保護したい場合 |
| ENCRYPTED_COLUMNS_ONLY | TDE で暗号化された列のデータのみ | TDE 列以外は平文。TDE 列だけ保護すれば十分な場合 |
| METADATA_ONLY | メタデータ(DDL)のみ | テーブル構造(列名・型)を隠したい場合 |
| NONE | 暗号化しない | ENCRYPTION_PASSWORD と一緒に指定するとエラー |
# データのみ暗号化(DDL は平文)
expdp hr/password \
directory=DP_DIR \
dumpfile=hr_data_enc.dmp \
schemas=HR \
encryption=DATA_ONLY \
encryption_password=MySecretPass123
# TDE 暗号化列のみ暗号化
expdp hr/password \
directory=DP_DIR \
dumpfile=hr_tde_only.dmp \
schemas=HR \
encryption=ENCRYPTED_COLUMNS_ONLY \
encryption_password=MySecretPass123
ALL はメタデータとデータの両方を暗号化するため最も安全です。ファイルサイズやパフォーマンスへの影響はわずかなので、セキュリティ要件がある場合は ALL を選んでください。
ENCRYPTION_ALGORITHM(暗号化アルゴリズム)
| アルゴリズム | 鍵長 | 安全性 | 速度 | 推奨 |
|---|---|---|---|---|
| AES128(デフォルト) | 128 ビット | 十分に安全 | 最速 | 通常用途に推奨 |
| AES192 | 192 ビット | より安全 | 中 | 高セキュリティ環境 |
| AES256 | 256 ビット | 最も安全 | やや遅い | 金融・官公庁・コンプライアンス要件 |
# AES256 で暗号化(最も安全)
expdp hr/password \
directory=DP_DIR \
dumpfile=hr_aes256.dmp \
schemas=HR \
encryption=ALL \
encryption_password=MySecretPass123 \
encryption_algorithm=AES256
・社内利用のみ →
AES128(デフォルト)で十分・外部転送(クラウド / メール / USB)→
AES256 を推奨・コンプライアンス要件(PCI DSS / ISMS 等)→ 要件に記載されたアルゴリズムを確認
ENCRYPTION_MODE(暗号化の鍵管理方式)
| モード | 鍵の管理方法 | 必要な設定 | 用途 |
|---|---|---|---|
| PASSWORD | ENCRYPTION_PASSWORD で指定したパスワードで暗号化 | なし(パスワードのみ) | ファイル転送先でもパスワードだけで復号可能 |
| TRANSPARENT | Oracle Wallet(TDE マスターキー)で暗号化 | Wallet のオープンが必要 | 同一 Wallet 環境で自動復号。パスワード不要 |
| DUAL | PASSWORD + TRANSPARENT の両方 | Wallet + パスワード | 同一 Wallet なら自動復号、別環境ならパスワードで復号 |
# PASSWORD モード(デフォルト: ENCRYPTION_PASSWORD 指定時)
expdp hr/password \
directory=DP_DIR \
dumpfile=hr_pw.dmp \
schemas=HR \
encryption_password=MySecretPass123 \
encryption_mode=PASSWORD
# TRANSPARENT モード(Wallet 必須、パスワード不要)
expdp hr/password \
directory=DP_DIR \
dumpfile=hr_tde.dmp \
schemas=HR \
encryption=ALL \
encryption_mode=TRANSPARENT
# → 同じ Wallet が開いている環境でのみ impdp 可能
# DUAL モード(Wallet + パスワード)
expdp hr/password \
directory=DP_DIR \
dumpfile=hr_dual.dmp \
schemas=HR \
encryption_password=MySecretPass123 \
encryption_mode=DUAL
# → 同じ Wallet 環境ではパスワード不要で復号
# → 別環境ではパスワードで復号
TRANSPARENT モードは同じ Oracle Wallet の環境でないと復号できません。別サーバーやクラウドにファイルを転送する場合は
PASSWORD または DUAL を使ってください。DUAL なら同一環境ではパスワード不要、別環境ではパスワードで復号できる汎用性があります。ライセンスの注意点
Data Pump の暗号化機能は Oracle Advanced Security Option に含まれます。Enterprise Edition + ASO ライセンスが必要です。Standard Edition では暗号化パラメータはエラーになります。
例外: TDE で既に暗号化されている列(ENCRYPTED_COLUMNS_ONLY)のエクスポート暗号化は、TDE のライセンスに含まれる場合があります。ライセンス詳細は Oracle の公式ドキュメントを確認してください。
パスワードの安全な管理方法
# NG: コマンド履歴やプロセスリスト(ps -ef)にパスワードが表示される expdp hr/password encryption_password=MySecretPass123 ...
# secure_export.par directory=DP_DIR dumpfile=hr_encrypted_%U.dmp logfile=hr_encrypted.log schemas=HR parallel=4 encryption=ALL encryption_password=MySecretPass123 encryption_algorithm=AES256
# parfile のパーミッションを制限(所有者のみ読み取り可) chmod 600 /oracle/dpdir/secure_export.par # parfile を使ってエクスポート expdp hr/password parfile=/oracle/dpdir/secure_export.par
| 方法 | 安全性 | 備考 |
|---|---|---|
| コマンドラインに直接指定 | 低い(ps, history に残る) | 絶対に避けるべき |
| parfile に記述 + chmod 600 | 中 | 最も一般的。parfile の管理に注意 |
| 環境変数経由 | 中 | シェルスクリプトで環境変数から渡す |
| Oracle Wallet(TRANSPARENT モード) | 最も安全 | パスワード自体が不要。Wallet の管理が必要 |
Data Pump 暗号化と TDE の比較
| 項目 | Data Pump 暗号化 (ENCRYPTION_PASSWORD) |
TDE(Transparent Data Encryption) |
|---|---|---|
| 暗号化対象 | ダンプファイル(.dmp)のみ | テーブル列 / 表領域(DB 内のデータ) |
| 保護タイミング | エクスポート時のみ | 常時(保存データが暗号化) |
| 鍵管理 | パスワード(ユーザー管理) | Oracle Wallet(自動管理) |
| インポート時の復号 | パスワード指定が必要 | 同一 Wallet 環境なら自動 |
| パフォーマンス影響 | エクスポート/インポート時のみ | I/O 時に常時暗号化/復号(わずかな影響) |
| ライセンス | ASO(Advanced Security Option) | ASO |
| 適するケース | ファイル転送時の保護 | データベース内のデータ保護 |
・TDE: データベース内の保存データを常時暗号化(At-Rest Encryption)
・Data Pump 暗号化: ダンプファイルの転送・保管時に暗号化(In-Transit / At-Rest)
「TDE で DB 内を保護 + Data Pump で出力ファイルも保護」が最も安全な運用です。
実務パターン集
パターン(1): 外部業者にデータを渡す場合
# AES256 + パスワードで暗号化して受け渡し
expdp system/password \
directory=DP_DIR \
dumpfile=vendor_delivery.dmp \
logfile=vendor_delivery.log \
schemas=SALES \
encryption=ALL \
encryption_password=VendorDelivery2026! \
encryption_algorithm=AES256
# パスワードは別経路(電話 / 対面)で受け渡し
# メールに書かない
パターン(2): 日次バックアップの暗号化
directory=DP_DIR dumpfile=daily_%U.dmp logfile=daily_export.log schemas=HR,SALES parallel=4 compression=ALL encryption=ALL encryption_password=DailyBackup2026Secure! encryption_algorithm=AES128
# crontab 例: 毎日 2:00 に実行 0 2 * * * /usr/bin/expdp system/password parfile=/oracle/dpdir/daily_backup.par
パターン(3): クラウドストレージへの安全な転送
# (1) 暗号化してエクスポート
expdp system/password \
directory=DP_DIR \
dumpfile=cloud_backup_%U.dmp \
schemas=HR \
parallel=4 \
encryption=ALL \
encryption_password=CloudSafe2026! \
encryption_algorithm=AES256
# (2) クラウドストレージに転送(暗号化済みなので安全)
# aws s3 cp /oracle/dpdir/cloud_backup_*.dmp s3://my-bucket/oracle-backup/
# oci os object put --bucket-name backups --file cloud_backup_01.dmp
よくあるエラーと対処
| エラー | 原因 | 対処法 |
|---|---|---|
| ORA-39174 暗号化パスワードが無効 |
impdp で指定したパスワードがエクスポート時と異なる | 正しい ENCRYPTION_PASSWORD を指定してリトライ |
| ORA-39012 権限不足 |
Advanced Security Option のライセンスがない(Standard Edition) | Enterprise Edition + ASO ライセンスを確認 |
| ORA-28365 Wallet が開いていない |
TRANSPARENT モードで Wallet が未オープン | ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY “wallet_pass” |
| ORA-39002 操作が無効 |
ENCRYPTION_PASSWORD と ENCRYPTION_MODE=TRANSPARENT を同時指定 | TRANSPARENT ではパスワード不要。DUAL か PASSWORD を使用 |
よくある質問
compression=ALL encryption=ALL encryption_password=... のように同時指定できます。圧縮してから暗号化されるため、ファイルサイズ削減 + セキュリティ保護の両方が実現できます。(2) Oracle Wallet(TRANSPARENT モード)でパスワード自体を不要にする
(3) 環境変数からシェルスクリプトで渡す
いずれもコマンド履歴(.bash_history)やプロセスリスト(ps)にパスワードが残るリスクを回避できます。
まとめ
Data Pump ダンプファイルの暗号化の要点をまとめます。
| やりたいこと | パラメータ |
|---|---|
| パスワードで暗号化 | encryption_password=パスワード |
| 全体(DDL + データ)を暗号化 | encryption=ALL(デフォルト) |
| データのみ暗号化 | encryption=DATA_ONLY |
| AES256 で暗号化 | encryption_algorithm=AES256 |
| Wallet で自動暗号化/復号 | encryption_mode=TRANSPARENT(Wallet 必須) |
| 別環境転送にも Wallet 環境にも対応 | encryption_mode=DUAL + encryption_password=パスワード |
| 暗号化ダンプのインポート | impdp … encryption_password=エクスポート時と同じパスワード |
| 圧縮 + 暗号化 | compression=ALL encryption=ALL encryption_password=パスワード |
Data Pump の基本は「Data Pump の使い方完全ガイド」、圧縮の詳細は「エクスポート時に圧縮する方法」、パラレル処理は「パラレル処理で高速化する方法」も併せて参照してください。

