2. 表領域の暗号化を行う
実施内容
- 表領域に対して暗号化を行い、データファイルを暗号化
- OSコマンドでデータファイルを開き、データが暗号化されていることを確認
ここではサンプルデータとしてHRスキーマを使用します。サンプルスキーマの用意手順は、以下をご確認ください。
2-1. データファイルの確認
Section titled “2-1. データファイルの確認”ここでは暗号化の確認を行うサンプルデータとしてHRスキーマを使用します。サンプルスキーマの用意手順は以下をご確認ください。
まず、HRスキーマのデフォルト表領域と、対象のデータファイルパスを確認します。
-- HRスキーマの表領域がUSERS表領域であることを確認SQL> select username, default_tablespace from dba_users where username ='HR';
USERNAME DEFAULT_TABLESPACE___________ _____________________HR USERS
-- USER表領域のデータファイルのパスを確認SQL> select tablespace_name, file_name from dba_data_files where tablespace_name = 'USERS';
TABLESPACE_NAME FILE_NAME__________________ ________________________________________________USERS /opt/oracle/oradata/FREE/FREEPDB1/users01.dbf2-2. 暗号化前:データファイルの中身を確認
Section titled “2-2. 暗号化前:データファイルの中身を確認”TDEで暗号化されていない場合、データファイルに平文に近い情報が残っているため、stringsコマンドを使用するとデータ文字列を拾うことができます。
-- SQL*Plus / SQLcl では "!" でOSコマンドを実行できるSQL> !strings /opt/oracle/oradata/FREE/FREEPDB1/users01.dbf | head -n 20}|{zW51YFREEUSERSAAAAAAAAAfrica,Oceania,Asia,Americas,EuropeAAAAAAAAAAAAAAAABelgium ArgentinaNigeriaMalaysiaDenmarkIsraelKuwaitMexicoNetherlandsこのようにTDEで暗号化されていない場合、 strings コマンドである程度のデータ内容が確認できてしまうことが分かります。
2-3. 表領域をオンラインで暗号化する
Section titled “2-3. 表領域をオンラインで暗号化する”USERS表領域をオンライン(OPENのまま)で暗号化します。
オンライン暗号化は ALTER TABLESPACE ... ENCRYPTION ONLINE ... ENCRYPT で実行できます。
-- 実行時間を計測SQL> set timing on
-- USERS表領域を暗号化SQL> alter tablespace users encryption online using 'AES256' encrypt;
Tablespace USERS altered.
Elapsed: 00:00:05.8862-4. 暗号化後:データファイルの中身を確認
Section titled “2-4. 暗号化後:データファイルの中身を確認”暗号化が完了したら、再度同じstringsコマンドでデータファイルの中身を確認します。
SQL> !strings /opt/oracle/oradata/FREE/FREEPDB1/users01.dbf | head -n 20}|{zW51YFREEUSERSwe oMi+#-=2WiTAZw4Vd_35zD@LH gaw2_1y6"xb})K@`2/Qz\dl80Q[\nE;+^&/b>VJ|l_?"@b0{{(D7このように、データファイルが暗号化され、先程の内容が解読できない形式に変わったことを確認できます。
また、アプリケーション視点(SQL)では問題なくデータが参照できることを確認します。
SQL> select * from hr.jobs;
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY_____________ __________________________________ _____________ _____________AD_PRES President 20080 40000AD_VP Administration Vice President 15000 30000AD_ASST Administration Assistant 3000 6000FI_MGR Finance Manager 8200 16000FI_ACCOUNT Accountant 4200 9000...19 rows selected.
Elapsed: 00:00:00.0152-5. 暗号化された表領域をオンラインで復号する
Section titled “2-5. 暗号化された表領域をオンラインで復号する”オンライン暗号化と同様、オンライン復号も行うことができます。
-- USERS表領域の復号SQL> alter tablespace users encryption online decrypt;
Tablespace USERS altered.
Elapsed: 00:00:06.064復号後、再び strings で文字列が読める形式に戻っていることを確認できます。
SQL> !strings /opt/oracle/oradata/FREE/FREEPDB1/users01.dbf | head -n 20}|{zW51YFREEUSERSAAAAAAAAAfrica,Oceania,Asia,Americas,EuropeAAAAAAAAAAAAAAAABelgium ArgentinaNigeriaMalaysiaDenmarkIsraelKuwaitMexicoNetherlandsオンライン暗号化/復号では、内部的にオンラインデータファイル移動に似た挙動で処理が進みます。処理中は「元ファイル」+「変換後の新ファイル」へ二重に書き込みが発生し、完了後に新ファイルへ切り替わります。
そのため、オンライン暗号化または復号処理を実行中にデータファイルを確認すると、処理中に *_new のようなファイルを確認することができます。
[oracle@db-tut FREEPDB1]$ ls -ltotal 999816-rw-r-----. 1 oracle oinstall 461381632 Feb 9 04:47 sysaux01.dbf-rw-r-----. 1 oracle oinstall 304095232 Feb 9 04:47 system01.dbf-rw-r-----. 1 oracle oinstall 20979712 Feb 9 04:28 temp01.dbf-rw-r-----. 1 oracle oinstall 104865792 Feb 9 04:47 undotbs01.dbf-rw-r-----. 1 oracle oinstall 75505664 Feb 9 04:48 users01.dbf-rw-r-----. 1 oracle oinstall 75505664 Feb 9 04:49 users01.dbf_new以上の結果では users01.dbf_new という同じサイズの新しいデータファイルが作成されていることが分かります。
このようにオンライン処理では元のデータファイルと同じサイズの新しいファイルが作成されます。そのため、オンライン変換には補助領域(auxiliary space)が必要です。対象データファイルと同程度の空き容量が必要になるケースがあるため、事前に空き容量を確認してから実行するようにしてください。
以上で、透過的データ暗号化(TDE)についてのチュートリアルは終了です。
なお、TDEを有効化後は、作成したウォレットや暗号キーは削除しないことを推奨します。表領域を暗号化していないからといって削除してしまうと、予期せぬ不具合を起こす可能性がありますのでご注意ください。