【Oracle】Data Pump でダンプファイルを暗号化する方法|ENCRYPTION_PASSWORD・ENCRYPTION_ALGORITHM・TDE・復号手順まで解説

【Oracle】Data Pump でダンプファイルを暗号化する方法|ENCRYPTION_PASSWORD・ENCRYPTION_ALGORITHM・TDE・復号手順まで解説 Oracle

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 で暗号化する(基本)

Shell(パスワード暗号化の基本)
# ダンプファイルをパスワードで暗号化してエクスポート
expdp hr/password \
    directory=DP_DIR \
    dumpfile=hr_encrypted.dmp \
    logfile=hr_encrypted.log \
    schemas=HR \
    encryption_password=MySecretPass123

# デフォルトでは ENCRYPTION=ALL(全データ暗号化)が適用される
# デフォルトのアルゴリズムは AES128
Shell(暗号化ダンプを impdp でインポート)
# インポート時に同じパスワードを指定
impdp hr/password \
    directory=DP_DIR \
    dumpfile=hr_encrypted.dmp \
    logfile=hr_import.log \
    schemas=HR \
    encryption_password=MySecretPass123

# パスワードが一致しないと ORA-39174 エラーが発生する
ENCRYPTION_PASSWORD を忘れると復号できない
パスワードを紛失した場合、暗号化されたダンプファイルは二度とインポートできません。Oracle サポートでも復旧はできないため、パスワードは安全な場所に記録・管理してください。

ENCRYPTION パラメータの 5 つのモード

モード 暗号化対象 用途
ALL(デフォルト) メタデータ(DDL)+ データの両方 最も安全。全体を暗号化したい場合
DATA_ONLY テーブルデータのみ DDL は平文で残したいが、データは保護したい場合
ENCRYPTED_COLUMNS_ONLY TDE で暗号化された列のデータのみ TDE 列以外は平文。TDE 列だけ保護すれば十分な場合
METADATA_ONLY メタデータ(DDL)のみ テーブル構造(列名・型)を隠したい場合
NONE 暗号化しない ENCRYPTION_PASSWORD と一緒に指定するとエラー
Shell(ENCRYPTION モードの指定例)
# データのみ暗号化(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
迷ったら ENCRYPTION=ALL を使う
ALL はメタデータとデータの両方を暗号化するため最も安全です。ファイルサイズやパフォーマンスへの影響はわずかなので、セキュリティ要件がある場合は ALL を選んでください。

ENCRYPTION_ALGORITHM(暗号化アルゴリズム)

アルゴリズム 鍵長 安全性 速度 推奨
AES128(デフォルト) 128 ビット 十分に安全 最速 通常用途に推奨
AES192 192 ビット より安全 高セキュリティ環境
AES256 256 ビット 最も安全 やや遅い 金融・官公庁・コンプライアンス要件
Shell(アルゴリズムの指定)
# 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 なら自動復号、別環境ならパスワードで復号
Shell(各モードの指定例)
# 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 環境ではパスワード不要で復号
# → 別環境ではパスワードで復号
ファイルを別環境に転送するなら PASSWORD または DUAL
TRANSPARENT モードは同じ Oracle Wallet の環境でないと復号できません。別サーバーやクラウドにファイルを転送する場合は PASSWORD または DUAL を使ってください。DUAL なら同一環境ではパスワード不要、別環境ではパスワードで復号できる汎用性があります。

ライセンスの注意点

Advanced Security Option(ASO)のライセンスが必要
Data Pump の暗号化機能は Oracle Advanced Security Option に含まれます。Enterprise Edition + ASO ライセンスが必要です。Standard Edition では暗号化パラメータはエラーになります。
例外: TDE で既に暗号化されている列(ENCRYPTED_COLUMNS_ONLY)のエクスポート暗号化は、TDE のライセンスに含まれる場合があります。ライセンス詳細は Oracle の公式ドキュメントを確認してください。

パスワードの安全な管理方法

Shell(NG: コマンドラインに平文パスワード)
# NG: コマンド履歴やプロセスリスト(ps -ef)にパスワードが表示される
expdp hr/password encryption_password=MySecretPass123 ...
parfile(推奨: parfile にパスワードを記述)
# 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
Shell(parfile で実行 + パーミッション制限)
# 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): 外部業者にデータを渡す場合

Shell
# 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): 日次バックアップの暗号化

parfile(daily_backup.par)
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
Shell(cron で日次実行)
# crontab 例: 毎日 2:00 に実行
0 2 * * * /usr/bin/expdp system/password parfile=/oracle/dpdir/daily_backup.par

パターン(3): クラウドストレージへの安全な転送

Shell
# (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 を使用

よくある質問

QENCRYPTION_PASSWORD を忘れてしまいました。復旧できますか?
A復旧できません。パスワードを忘れた場合、暗号化されたダンプファイルは二度とインポートできません。Oracle サポートでも復旧は不可能です。パスワードは必ず安全な場所(パスワードマネージャー等)に記録してください。
Q暗号化するとファイルサイズは増えますか?
A暗号化によるファイルサイズの増加はごくわずか(数 % 以下)です。compression=ALL と併用すれば、暗号化前のファイルサイズよりも圧縮効果で小さくなることが多いです。
Qcompression と encryption は同時に使えますか?
Aはい。compression=ALL encryption=ALL encryption_password=... のように同時指定できます。圧縮してから暗号化されるため、ファイルサイズ削減 + セキュリティ保護の両方が実現できます。
QStandard Edition で暗号化は使えますか?
A使えません。Data Pump の ENCRYPTION 系パラメータはEnterprise Edition + Advanced Security Option(ASO)が必要です。Standard Edition で暗号化が必要な場合は、OS レベルの暗号化(zip パスワード、gpg、dm-crypt 等)でダンプファイルを保護してください。
QTRANSPARENT モードと PASSWORD モードはどちらを使うべきですか?
A同一環境内のみでファイルを使う場合は TRANSPARENT(Wallet 管理、パスワード不要)が安全です。別環境にファイルを転送する場合は PASSWORD が必須です。汎用性を求めるなら DUAL(同一環境は自動復号、別環境はパスワード)が最も柔軟です。
Qパスワードをコマンドラインに書かない方法はありますか?
A(1) parfile にパスワードを記述し、ファイルのパーミッションを 600 に制限
(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 の使い方完全ガイド」、圧縮の詳細は「エクスポート時に圧縮する方法」、パラレル処理は「パラレル処理で高速化する方法」も併せて参照してください。