マルチテナントと透過的データ暗号化

マルチテナントのPDBで透過的データ暗号化を使用する際は、キーストア(ウォレット)の作り方によって統一モードと分離モードの二つのパターンがある。

統一モード:ルートコンテナとすべてのPDBが一つのキーストアを利用する。マスター暗号化キーは個々のPDB毎に作成可能。

分離モード:PDB毎に個別のキーストアを作成して利用する。

Advanced Securityガイド
統一モードでは、CDB、およびキーストアが統一モードになっているPDBの共通のキーストアを作成できます。
Advanced Securityガイド
分離モードでは、各プラガブル・データベース(PDB)のキーストアを作成できます。

ただ、どうやら分離モードはオンプレミス環境では使用できないようだ(単にライセンスやサポートの問題なのか、物理的に実行できないのかは不明)。

ここでは、統一モードでPDB毎にマスター暗号化キーを作成してみる。

ルートコンテナでの操作

先にキーストアの場所を作成しておく。

$ mkdir -p /home/oracle/wallet/cdb19/tde

ルートコンテナでwallet_rootパラメータを設定する。

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> alter system set wallet_root='/home/oracle/wallet/cdb19' scope=spfile;

設定反映のためいったん再起動。

さらにルートコンテナでtde_configurationパラメータを設定する。

SQL> alter system set tde_configuration="KEYSTORE_CONFIGURATION=FILE" scope=both;

キーストア(+自動ログインキーストア)を作成する。

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

マスター暗号化キーを設定。

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

PDBでの操作

PDBに接続してキーストアをオープンする。

SQL> alter session set container=cdb19p1;
SQL> administer key management set keystore open identified by oracle;

この時点でキーストアの状態を確認しても、マスターキーがないと認識されている。

SQL> select status from v$encryption_wallet;

STATUS
------------------------------
OPEN_NO_MASTER_KEY

改めて、PDB用のマスター暗号化キーを作成する。

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

キーストアがオープンされたことを確認する。

SQL> select status from v$encryption_wallet;

STATUS
------------------------------
OPEN

コメント