Data Guardと透過的データ暗号化

Data Guardで透過的データ暗号化を使用した際の挙動について確認する。

プライマリ側だけ表領域を暗号化した場合の挙動

以下のようにプライマリ側で一部の表領域を暗号化する。

キーストアの場所を作成

$ mkdir /home/oracle/wallet

初期化パラメータの設定

SQL> alter system set wallet_root='/home/oracle/wallet' scope=spfile;
SQL> shu immediate
SQL> startup
SQL> alter system set tde_configuration="KEYSTORE_CONFIGURATION=FILE" scope=both;
SQL> shu immediate
SQL> startup

キーストア(自動ログインキーストア)の作成

SQL> administer key management create keystore '/home/oracle/wallet' identified by oracle;
SQL> administer key management create auto_login keystore from keystore '/home/oracle/wallet' identified by oracle;

作成されたキーストアを適切な場所に移動

$ mkdir /home/oracle/wallet/tde
$ mv /home/oracle/wallet/cwallet.sso /home/oracle/wallet/tde/cwallet.sso 
$ mv /home/oracle/wallet/ewallet.p12 /home/oracle/wallet/tde/ewallet.p12 

マスター暗号化キーの設定

SQL> administer key management set key force keystore identified by oracle with backup;

テスト用の表領域を作成

SQL> create tablespace enctbs datafile '/u01/app/oracle/oradata/DB19P/enctbs.dbf' size 10M autoextend on;

表領域を使うテスト用のテーブルを作成

SQL> create user test identified by test;
SQL> grant dba to test;
SQL> conn test/test
SQL> create table enctab(col1 number) tablespace enctbs;
SQL> insert into enctab values(1);
SQL> commit;

この時点では、まだ表領域は暗号化されていないので、スタンバイ側にも当然問題なく伝播される。

ここで、おもむろに表領域を暗号化してみる。

SQL> alter tablespace enctbs offline normal;
SQL> alter tablespace enctbs encryption offline using 'AES256' encrypt;
SQL> alter tablespace enctbs online;

暗号化されたことを確認

SQL> select tablespace_name, encrypted from dba_tablespaces;

TABLESPACE_NAME                ENC
------------------------------ ---
SYSTEM                         NO
SYSAUX                         NO
UNDOTBS1                       NO
TEMP                           NO
USERS                          NO
ENCTBS                         YES  ←

この状態でスタンバイからも暗号化の状況を確認すると、表領域自体は暗号化されているような表示となる。

SQL> select tablespace_name, encrypted from dba_tablespaces;

TABLESPACE_NAME                ENC
------------------------------ ---
SYSTEM                         NO
SYSAUX                         NO
UNDOTBS1                       NO
TEMP                           NO
USERS                          NO
ENCTBS                         YES  ← スタンバイ側でも暗号化済

しかし、プライマリ側でこの暗号化された表に何かデータを入れたとしても、スタンバイには反映されない。スタンバイ側のアラートログには以下のようなメッセージが表示される。

2023-03-27T21:31:12.133890+09:00
Errors in file /u01/app/oracle/diag/rdbms/db19s/db19s/trace/db19s_pr00_5129.trc:
ORA-28365: ウォレットがオープンしていません
PR00 (PID:5129): Managed Standby Recovery not using Real Time Apply
Recovery interrupted!
Recovered data files to a consistent state at change 3421779
Stopping change tracking
2023-03-27T21:31:12.189108+09:00
Errors in file /u01/app/oracle/diag/rdbms/db19s/db19s/trace/db19s_pr00_5129.trc:
ORA-28365: ウォレットがオープンしていません
2023-03-27T21:31:12.307800+09:00
Background Media Recovery process shutdown (db19s)

ウォレット(キーストア)がないという警告。そこで、スタンバイにもキーストアの準備と、暗号化の設定を行ってみる。

キーストアの場所を作成

$ mkdir /home/oracle/wallet

初期化パラメータの設定

SQL> alter system set wallet_root='/home/oracle/wallet' scope=spfile;
SQL> shu immediate
SQL> startup 
SQL> alter system set tde_configuration="KEYSTORE_CONFIGURATION=FILE" scope=both;
SQL> shu immediate
SQL> startup

プライマリからキーストアをコピー

$ mkdir /home/oracle/wallet/tde
$ scp oracle@oradbs.dn.home:/home/oracle/wallet/tde/cwallet.sso /home/oracle/wallet/tde/cwallet.sso 
$ scp oracle@oradbs.dn.home:/home/oracle/wallet/tde/ewallet.p12 /home/oracle/wallet/tde/ewallet.p12 

そして、スタンバイ側は一度再起動する。

そうすると、スタンバイ側の表領域も無事暗号化されることがわかる。

コメント