0) { obj.className = "imgborder_on"; } } } function hideImage(obj) { if (obj.className.substr(0, 10) == "imgborder_") { obj.src = eyeglass.src; obj.className = "imgborder_off"; } } function showAllImages() { imgs = document.images; for (i=0; i < imgs.length; i++) { showImage(imgs[i]); } } function hideAllImages() { imgs = document.images; for (i=0; i < imgs.length; i++) { hideImage(imgs[i]); } } //-->
Oracle Database 11gでのTransparent Database Encryptionの使用
目的
このチュートリアルは、Transparent Database Encryptionを使用して、Oracle Database 11gのEnterprise Manager Database Controlによりディスク内に格納されたデータを暗号化する方法について説明します。
所要時間
30分
トピック
このチュートリアルでは、以下のトピックについて説明します。
スクリーンショットの表示
このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。 (警告:すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)
注: 各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にある各アイコンの上にカーソルを置いてください。
概要
Transparent Data Encryptionは、各表の列または表領域全体の暗号化を可能とします。 暗号化された列にデータを挿入すると、Transparent Data Encryptionは自動的にデータを暗号化します。 列を選択すると、データは自動的に復号化します。 選択後、データは再度暗号化されます。
Transparent Data Encryptionは、ストレージ・メディアまたはデータ・ファイルが盗難にあったとき、データベースとは別にあるセキュリティ・モジュール(ウォレット)内に暗号化キーを格納することで、メディア上に格納されたデータを保護します。 このような種類の盗難からデータを保護することが、多くの法規制を遵守するために必要です。 Transparent Data Encryptionを使用するメリットは、最低限のコーディングで迅速かつ簡単に実装できる点です。
Oracle Database 11gでは、Oracle Enterprise Managerを使用してTransparent Data Encryptionを管理できます。
トピック・リストに戻る
前提条件
このチュートリアルを始める前に、次のことを確認してください。
| 1.
|
Oracle Database 11gがインストールされていること。
|
トピック・リストに戻る
暗号化のためのデータベースの準備
このセクションでは、
sqlnet.oraを更新し、暗号化ウォレット(
ewallet.p12)を作成してウォレットを開き、Transparent Data Encryption(TDE)の
master keyを作成します。 また、TDEが有効化されており、Oracle Enterprise Manager Database Control内でウォレットが開いていることを確認します。 以下の手順を実行します。
| 1.
|
エディタを使用して、
$ORACLE_HOME/network/adminディレクトリの
sqlnet.oraファイルを開きます。
sqlnet.ora
ファイルを更新して、
ENCRYPTED_WALLET_LOCATIONのエントリを含めます。 以下のコマンドを追加します。
ENCRYPTION_WALLET_LOCATION=
(SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY=<oracle_home>)))
<oracle_home>はOracleホーム・ディレクトリ(例、/u01/app/oracle/product/11.1.0/db_1)です。
変更を保存し、ファイルを閉じます。
注:暗号化ウォレットの格納場所はどのディレクトリでも選択できますが、DBのインストール時に作成される標準の分かりにくいウォレット(
cwallet.sso)と同じ場所にはしないでください。
|
| 2.
|
次に、ウォレットを開いてマスター暗号化キーを作成します。 SQL*Plusセッションを開き、以下のコマンドを実行します。
connect / as sysdba
alter system set key identified by "welcome1";
上記のalterコマンドは、以下を実行します。
|
指定されたディレクトリ内に暗号化ウォレットが存在しない場合、暗号化ウォレットが作成されます(
ewallet.p12)。その後ウォレットが開かれ、TDEのマスター鍵が作成または再作成されます。
|
|
指定されたディレクトリ内に暗号化ウォレットが存在する場合、ウォレットが開かれTDEのマスター鍵が作成または再作成されます。 |
注:'
alter system'の権限を持つユーザーのみが、マスター鍵を作成してウォレットを開くことができます。
新しい暗号化キーでデータを再暗号化しない限り、マスター鍵の作成は一度のみ行われます。
一度上記コマンドで暗号化ウォレットを作成した後は、上記コマンドを再実行しないでください。データベース再起動後にはウォレットを開く必要がありますが、新しいマスター鍵を作成する必要はありません。 ウォレットを開く場合のコマンドは以下のとおりです。
alter system set wallet open identified by "welcome1";
マスター暗号化キーは、各表がそれぞれの暗号化キーを持っているため必要です。 これらの列キーは、データベース内に格納されます。 ウォレットに保存できるキーの数には制限があり、あまり拡張性がないため、列キーはマスター鍵で暗号化します。 この方法であれば、必要なだけ列キーを持つことができ、ウォレット内に格納されたマスター鍵(古いバックアップ・テープのデータを復号化する場合に必要となる古いキーを含む)の数を少なく抑えることができます。 デフォルトにおいて、上記のコマンドでは192ビットAdvanced Encryption Standard(AES192)を使用してキーを生成します。 3DESも使用できるほか、小さいビット数または大きいビット数のAES暗号化も使用できます。
|
| 3.
|
Transparent Data EncryptionがOracle Enterprise Manager Database Console内で有効になっていることを確認するには、ブラウザを開いて以下のURLを入力します。
https://<hostname>:1158/em
systemユーザーとしてログインします。
|
| 4.
|
「
Server」タブを選択します。
|
| 5.
|
Securityの下で「
Transparent Data Encryption」をクリックします。
|
| 6.
|
ウォレットが開き、Transparent Data Encryptionが有効化されます。
|
トピック・リストに戻る
既存の表内の列の暗号化
このチュートリアルでは、OE.CUSTOMERS表内の列を暗号化します。 以下の手順を実行します。
| 1.
|
Related Linksの下で、「
Tables」をクリックします。
|
| 2.
|
Schemaフィールドに
OEと入力し、「
Go」をクリックします。
|
| 3.
|
CUSTOMERSの前にあるボタンを選択し、「
Edit」をクリックします。
|
| 4.
|
別の暗号化アルゴリズムとキー・シードを指定して、この表内にあるすべての暗号化列で使用することもできます。 「
Encryption Options」をクリックします。
|
| 5.
|
オプションを確認して、「
Continue」をクリックします。
|
| 6.
|
Encryption列の
CREDIT_LIMITのチェックボックスを選択し、「
Apply」をクリックします。
|
| 7.
|
列を暗号化するジョブが送信されます。 ジョブのリンクをクリックします。
|
| 8.
|
ジョブが成功しました。 「
Database」ブレッドクラムをクリックします。
|
トピック・リストに戻る
暗号化された表の作成
このセクションでは、暗号化された表領域を作成します。 以下の手順を実行します。
| 1.
|
Oracle Enterprise Manager Database ControlのServerタブの下にあるStorageで「
Tablespaces」を選択します。
|
| 2.
|
「
Create」をクリックします。
|
| 3.
|
表領域の名前に
OBEと入力し、Datafilesの下にある「
Add」をクリックします。
|
| 4.
|
First Nameに
OBEと入力してから、「
Continue」をクリックします。
|
| 5.
|
表領域の暗号化は、暗号化形式でディスク内にデータを格納することで、表領域内のすべてのオブジェクトを保護します。 Oracleウォレットは必ず存在し、開いた状態にある必要があります。 「
Encryption Options」をクリックします。
|
| 6.
|
オプションを確認して、「
Continue」をクリックします。
|
| 7.
|
「
Encryption」チェックボックスを選択し、「
OK」をクリックします。
|
| 8.
|
表領域の作成に成功しました。 Tablespacesのリストから「
OBE」リンクを選択します。
注:エラーが返されたら、端末ウィンドウに切り替えて、systemとしてSQL*Plusにログインし、以下のコマンドを実行します。
CREATE TABLESPACE OBE DATAFILE '/u01/app/oracle/oradata/orcl/obe' SIZE 100M
ENCRYPTION DEFAULT STORAGE (ENCRYPT);
|
| 9.
|
EncryptionオプションがYESに設定されていることを確認します。 「
Database」ブレッドクラムをクリックします。
|
トピック・リストに戻る
暗号化された表からの索引を使用したデータのアクセス
このセクションでは、暗号化された表領域内に表を作成し、表内の列の1つに索引を作成してから、その列内のデータにアクセスして、どの実行計画が使用されているかを確認します。 以下の手順を実行します。
| 1.
|
SQLDeveloperを開きます。 Linuxで端末ウィンドウを開き、以下のコマンドを実行します。
cd $ORACLE_HOME/sqldeveloper/sqldeveloper/bin
./sqldeveloper
以前の接続から移行するかどうか確認するメッセージが表示されたら、「
No」をクリックします。
|
| 2.
|
接続を作成します。 「
Connections」を右クリックして、「
New Connection」を選択します。
|
| 3.
|
Connection Name、Username、Passwordに
OEと入力します。 SIDに
orclと入力し、「
Test」をクリックします。
|
| 4.
|
テストは成功しました。 「
Connect」をクリックします。
|
| 5.
|
まず、CUSTOMERS表のコピーを作成します。 SQL Worksheetで、以下のコマンドを入力して「
Execute」をクリックします。
CREATE TABLE customers_obe AS SELECT * FROM customers
|
| 6.
|
これで、(暗号化された)OBE表領域に表を移動できます。
Tablesを開いて「
CUSTOMERS_OBE」を右クリックし、「
Storage」、「
Move Tablespace」の順に選択します。
|
| 7.
|
リストから「
OBE」表領域を選択して、「
Apply」をクリックします。
|
| 8.
|
OBE表領域への表の移動に成功しました。 「
OK」をクリックします。
|
| 9.
|
これで、DATE_OF_BIRTH列に索引を作成できます。 SQL Worksheet領域で以下のコマンドを入力し、「
Execute」をクリックします。
CREATE INDEX customers_obe_idx ON customers_obe(date_of_birth)
|
| 10.
|
これで、DATE_OF_BIRTH列からデータをいくつか選択できるようになりました。 SQL Worksheet領域で以下のコマンドを入力し、「
Execute」をクリックします。
SELECT cust_last_name, date_of_birth FROM customers_obe
WHERE date_of_birth > '04-FEB-59'
AND date_of_birth < '06-FEB-59'
データが選択されました。 どのExplain Planを使用したか確認します。 「
Explain Plan」アイコンをクリックします。
|
| 11.
|
索引を使用して、全表スキャンではなく索引(範囲スキャン)によりデータを取得したことに注意してください。
|
トピック・リストに戻る
データベース・マスター鍵の再生成
データベース・マスター鍵が変更された場合、再生成することができます。 以下の手順を実行します。
| 1.
|
Oracle Enterprise Manager Database ControlのServerタブの下にあるSecurityで「
Transparent Data Encryption」を選択します。
|
| 2.
|
「
Advanced Options」の前にある「
+」をクリックします。
|
| 3.
|
Regenerate Master Database Keyの下にある「
Regenerate」をクリックします。 Encryption Wallet Passwordに
welcome1と入力し、「
OK」をクリックします。
|
| 4.
|
マスター・データベース・キーが再生成されました。
|
トピック・リストに戻る
ウォレットの終了
ウォレットを閉じることで、Transparent Data Encryptionを無効化できます。 以下の手順を実行します。
| 1.
|
「
Close Wallet」チェックボックスを選択し、「
OK」をクリックします。
|
| 2.
|
ウォレットが閉じました。 Transparent Data Encryptionが無効になっていることを確認するには、以前作成した暗号化列からデータを選択します。 「
Database」ブレッドクラムをクリックします。
|
| 3.
|
ページの下部までスクロールし、Related Linksの下にある「
SQL Worksheet」をクリックします。
|
| 4.
|
SQL Command領域で以下のコマンドを入力し、「
Execute」をクリックします。
select credit_limit from oe.customers_obe
|
| 5.
|
列は暗号化されているため、データを問い合わせるためにはウォレットを開く必要があります。 このウィンドウを開いたままにして、Oracle Enterprise Managerに戻ります。
|
トピック・リストに戻る
ウォレットの再開
ウォレットを再度開くには、以下の手順を実行してください。
| 1.
|
Oracle Enterprise Manager Database ControlのServerタブの下にあるSecurityで「
Transparent Data Encryption」を選択します。
|
| 2.
|
Enable Transparent Data Encryptionの下で、
Encryption Wallet Passwordにパスワードを入力し、「
OK」をクリックします。
|
| 3.
|
ウォレットが開きました。
|
| 4.
|
SQL Worksheetに戻り、問合せを再度実行します。 今度は、列のデータが表示されます。
|
トピック・リストに戻る
まとめ
このチュートリアルで学習した内容は、次のとおりです。
|
暗号化のためのデータベースの準備 |
|
既存の表内の列の暗号化 |
|
暗号化された表の作成 |
|
データベース・マスター鍵の再生成 |
|
ウォレットの終了および再開 |
トピック・リストに戻る
このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。
|