透過的データ暗号化(TDE)を使用してOracleデータベースを保護する方法
本記事では、Oracle®データベースのAdvanced Securityオプションを活用し、Transparent Data Encryption(TDE)によって機密データを保護するための要点を解説します。TDEを利用することで、データベースの特定の列を暗号化し、暗号化キーを安全に管理できます。
はじめに
TDEは、OSファイル内に格納される機密性の高いデータベースデータを暗号化できる機能です。暗号化キーは、データベースの外部に配置されたセキュリティモジュール内で安全に保存・管理されます。
暗号化されたデータは、アクセス権限を持つデータベースユーザーに対しては透過的に復号されます。つまり、ユーザーは特別な操作を行うことなく、通常どおりデータを参照・更新できます。
なぜTDEを使うべきなのか
仮にデータベースのバックアップテープが盗難され、攻撃者が自身のサーバーでリストアできてしまったら、企業の最重要機密データが漏えいしてしまいます。これは許容できないリスクです。多くの企業規則やガイドラインでは、データベースデータの保護がコンプライアンス要件として定められています。この脆弱性からデータベースをどう守ればよいのでしょうか。
一つの有効な解決策が、データベース内の機密データを暗号化し、暗号化キーを別の場所に保管することです。キーがなければ、盗み出されたデータは無価値なものになります。
TDEの仕組み
TDEはキーベースのアクセス制御システムです。暗号化されたデータが不正に取得されても、認可された復号なしには内容を読み取ることはできません。一方、テーブルへのアクセス権を持つ正規ユーザーに対しては、復号が自動的に実行されます。
暗号化列を含むテーブルでは、その暗号化キーは「列暗号化キー」と呼ばれます。各テーブルの列暗号化キーは、データベースサーバーのマスターキーによって暗号化されます。そしてマスター暗号化キーは、Oracle Wallet内にデータベースの外部へ保管されます。
暗号化されたテーブルキーはデータディクショナリに格納されます。暗号化対象と定義された列にユーザーがデータを入力すると、Oracleは以下の処理を実行します。
- Walletからマスターキーを取得する。
- データディクショナリから該当テーブルの暗号化キーを復号する。
- その暗号化キーを使って入力値を暗号化する。
- 暗号化済みのデータをデータベースに格納する。

画像出典: https://docs.oracle.com/database/121/ASOAG/img/GUID-5FD3A3BB-441C-4C42-A520-1248974627B0-default.png
TDEは、以下のデータベースファイル内のデータを暗号化します。
- データファイル
- REDOログおよびアーカイブログファイル
- メモリ
- バックアップファイル
Oracle Walletの管理
ここでは、Walletの作成、オープン、クローズの手順について説明します。
Walletを作成する
TDEを初めて有効化する際は、マスターキーを格納するためのWalletを作成する必要があります。
デフォルトでは、Walletは$ORACLE_BASE/admin/$ORACLE_SID/walletに作成されますが、sqlnet.oraに以下の行を記述することで、任意の場所に変更できます。
ENCRYPTION_WALLET_LOCATION = (SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY =D:\oracle\product\Wallet)))
続いて、次のコマンドを実行してWalletを作成します。
ALTER SYSTEM SET ENCRYPTION KEY [certificate_ID] IDENTIFIED BY password;

- Walletのパスワードは大文字・小文字が区別されます。パスワード文字列は必ず二重引用符(" ")で囲んでください。
- certificate_IDは、Oracle Walletに格納された証明書の一意識別子を指定する任意の文字列です。Walletがオープンしている状態で、固定ビューV$WALLETを照会することでcertificate_IDを検索できます。

Walletのオープンとクローズ
Walletの作成とパスワード設定が完了したら、データベースを起動するたびに、SYS、SYSTEM、またはSYSDBAアカウントを使用してWalletを明示的にオープンする必要があります。
たとえば、次のコマンドを実行します。
alter system set encryption wallet open identified by "oracle12345";
重要: データベースに対して何らかの操作を行うには、必ずWalletをオープンしておく必要があります。
次の例は、データベース自体は稼働中でもWalletがクローズしている場合の操作を示したものです。
alter system set encryption wallet close;

この状態で暗号化列からデータを取得しようとすると、Walletがクローズしているため、次のようなエラーメッセージが表示されます。

暗号化列からデータを取得するには、以下のコマンドでWalletをオープンします。
alter system set encryption wallet open identified by "oracle12345";

Walletがオープンになったことで、暗号化列から問題なくデータを取得できるようになります。
暗号化列を持つテーブルの作成
次のコマンドを使用すると、暗号化列を含むテーブルを作成できます。
CREATE TABLE test2 (id number,name varchar2(20),s_s_num number ENCRYPT);

非デフォルトアルゴリズムとNO SALTオプションを使ったテーブル作成
SALTとは、暗号化の前に平文データへ付加されるランダムな文字列のことです。SALTを加えることで暗号強度が高まり、ハッキングがより困難になります。デフォルトでは、TDEは平文を暗号化する前にSALTを追加します。
ただし、SALTオプションで暗号化された列にはインデックスを作成できません。暗号化列にインデックスを設定したい場合は、次の例のようにNO SALTオプションを使用する必要があります。
CREATE TABLE test3 (id number,name varchar2(20),s_s_num number ENCRYPT NO SALT,Ph_no number ENCRYPT USING '3DES168');

この例では、S_S_NUM列はNO SALTオプションで暗号化され、PH_NO列はデフォルトのSALTオプションで作成されています。
次の例は、PH_NO列がデフォルトでSALTオプション付きとなっているため、その列にインデックスを作成できないことを示しています。

既存テーブルの列を暗号化する
既存テーブルの列は、次のコマンドで暗号化できます。
ALTER TABLE test1 ADD (ssn VARCHAR2(11) ENCRYPT);

列の暗号化を無効にする
列の暗号化を解除したい場合は、次のコマンドを実行します。
ALTER TABLE test1 MODIFY (ssn DECRYPT);

TDE使用時の制限事項
TDEを利用する際は、以下の制限事項に留意してください。
- 暗号化列には、B-treeインデックス以外のインデックスを作成できません。

- 外部ラージオブジェクト(BFILE)には暗号化を適用できません。

- Walletがクローズしている状態では、インポート/エクスポート操作を実行できません。
Walletがクローズしているために発生するエラー

Walletがオープンしていれば成功

まとめ
不正アクセスやバックドアによる侵入から機密データを保護したい場合は、TDEセキュリティオプションの活用をおすすめします。この機能により、複雑なコーディングやキー管理の手間なく、即座にデータ暗号化とコンプライアンス対応を実現できます。その結果、本来注力すべき戦略的な業務に集中できるようになります。
コメントやご質問がある場合は、フィードバックタブからお気軽にお寄せください。
専門家による管理・運用・構築支援で環境を最適化
Rackspaceのアプリケーションサービス(RAS)の専門家は、幅広いアプリケーションポートフォリオにわたって、以下のようなプロフェッショナルサービスおよびマネージドサービスを提供しています。
- eコマースおよびデジタルエクスペリエンスプラットフォーム
- エンタープライズ・リソース・プランニング(ERP)
- ビジネスインテリジェンス
- Salesforce顧客関係管理(CRM)
- データベース
- メールホスティングおよび生産性向上ソリューション
私たちが提供する価値:
- 偏りのない専門知識:お客様のモダナイゼーションの道のりをシンプルにし、すぐに価値を発揮できる機能に焦点を当ててご案内します。
- Fanatical Experience™:「プロセス第一、テクノロジー第二」のアプローチと専任テクニカルサポートを組み合わせ、包括的なソリューションを提供します。
- 比類のないポートフォリオ:豊富なクラウドの経験を活かし、適切なクラウド上に最適なテクノロジーを選択・導入できるよう支援します。
- アジャイルなデリバリー:お客様の現在のステージに合わせて伴走し、お客様の成功を私たち自身の成功として捉えます。
まずはチャットでお気軽にお問い合わせください。
-
透過的データ暗号化(TDE)とは?Oracleデータベースの暗号化機能を徹底解説
Oracle®は、セキュリティ対策の一環として、Oracle 12cにおいて透過的データ暗号化(Transparent Data Encryption:TDE)機能を導入しました。この機能により、ユーザーは機密データに対して表領域レベルおよび列レベルの暗号化を有効にできるようになります。 TDEの概要 データを暗号化すると、許可されたユーザーやアプリケーションのみがそのデータにアクセスできるようになります。Oracleでは、認証・権限付与・監査のためのツールやプロセスがデータベースに対して提供されていますが、データを格納しているOSのデータファイル自体は保護対象外でした。そこでTDEが重要な役
-
Oracle 19cのDBCAコマンドでデータベースをクローンする方法【サイレントモード完全ガイド】
本記事では、Oracle Database 19cの新機能であるDatabase Configuration Assistant(DBCA)を使用して、ソースデータベースのバックアップを作成することなく、リモートのプラガブル・データベース(PDB)をコンテナ・データベース(CDB)へクローンする手順をご紹介します。 DBCAによるクローンの最大の特長は、ソースからターゲットへの複製にかかる時間が最小限に抑えられる点です。 ソースDBの構成 CDB:LCONCDB PDB:LCON 以下は、ソース側の各コンテナ(CDBおよびPDB)に存在するDBFファイルの総数です。クローン作成後は、ター