Secure Steady
DB 暗号化 - DB 暗号化 の使い方・オプション・サンプル

DB 暗号化 - DB 暗号化

データベースに保存されたデータを暗号化し、不正アクセスやメディアの物理的な盗難からデータを保護する技術。

概念図

DB 暗号化 diagram

実例

PostgreSQL でのカラムレベル暗号化

bash
-- PostgreSQL: pgcrypto によるカラムレベル暗号化
INSERT INTO users (email_encrypted)
VALUES (pgp_sym_encrypt('user@example.com', 'encryption_key'));

SELECT pgp_sym_decrypt(email_encrypted, 'encryption_key') FROM users;

MySQL の TDE 設定

bash
-- MySQL: TDE(透過的データ暗号化)の有効化
ALTER TABLE sensitive_data ENCRYPTION='Y';

DB 暗号化の種類

データベースの暗号化にはレベルに応じた手法があります。

  • 透過的データ暗号化(TDE): ディスク上のデータファイルを暗号化する。アプリケーションの変更が不要。ストレージの物理的な盗難やファイルコピーからデータを保護する
  • カラムレベル暗号化: 特定のカラム(クレジットカード番号、個人情報など)を個別に暗号化する。アプリケーション層での暗号化・復号処理が必要
  • 通信の暗号化: DB サーバーとクライアント間の通信を TLS で暗号化する
  • バックアップの暗号化: バックアップファイルを暗号化し、バックアップメディアの紛失・盗難によるデータ漏洩を防ぐ

TDE はディスク上のデータを保護するが、DB にログインできればデータは平文で見えるため、アクセス制御との併用が必要です。

暗号鍵の管理

暗号化の強度は鍵の管理に依存します。

  • 鍵とデータの分離: 暗号化鍵をデータベースと同じサーバーに保存しない。外部の KMS(Key Management Service)を使用する
  • 鍵のローテーション: 定期的に暗号化鍵を更新する。古い鍵で暗号化されたデータを新しい鍵で再暗号化するプロセスを自動化する
  • 鍵の階層化: マスター鍵でデータ暗号化鍵を暗号化する二層構造(エンベロープ暗号化)を採用する
  • バックアップ鍵の保護: 鍵のバックアップを安全な場所に保管し、鍵の消失によるデータ喪失を防ぐ
  • アクセス制御: 鍵へのアクセスを厳格に制御し、監査ログを取得する

関連トピック