今回はデータの暗号化の手順確認の途中でつまづいた出来事のログ。
環境 : Oracle RAC 12c ( 2ノードRAC )
現象 : ウォレットがクローズされない
対処 : 全ノードでウォレットの設定をした後、DB再起動で正しい挙動に。
はじめに
オラクルにはセキュリティの機能として、データの暗号化機能がある。
暗号化はウォレットと呼ばれる、暗号キーを格納しているファイルを用いて実現される。
大まかな流れは以下のとおり。
- マスターキーの作成(作成時にウォレットが作成され、その中にマスターキーが格納される)
- ウォレットのオープン
- 表領域自体や、テーブルの特定列を暗号化した状態でテーブルを作成
このようにして作成された表領域内のオブジェクトやテーブルの列データには
ウォレットをオープンしていないとアクセスできないし
当然ながら、暗号化表領域、暗号化列を含んだ表の作成もできない。
これらの暗号化をTDE表領域暗号化、TDE列暗号化という。
ちなみにTDEとはTransparent Data Encryption (透過的データ暗号化)の略のことである。
今回はこの流れを確認しようとしたところ、冒頭に述べた通りウォレットがクローズできない
(コマンドはエラーが返らないが実際にはクローズされていない)
といった現象が起きた。今回はその状況と対処を備忘録としてまとめておく。
なお、試したのはTDE列暗号化である。
0 : 下準備
マスターキー作成のために以下2つを用意する。
- sqlnet.oraファイル
- ウォレットを置くディレクトリ
sqlnet.oraの作成
$ORACLE_HOME/network/admin以下に作成する。
ウォレットを置くディレクトリの作成
1 : マスターキーの作成
1 : ウォレットの状態の確認
ウォレットはオープンしている模様。
順調である。
この状態でウォレットをクローズしてみる。
クローズしたはずなのにOPENのまま。DBを再起動しても変わらず。
試しにgv$ビューで全ノードのウォレットの状態を確認してみる。
確認するとnode2の方はNOT_AVAILABLEに。
まだウォレットを置いてないので当然だがこれが原因かもしれない。
ということでnode2側にもwalletを置く。
DBを再起動し再挑戦
今度はクローズされた。よしよし。
最後に、当初の主目的であったTDE列暗号化を試す。
最後に
ウォレットを誤って削除した場合は、そのウォレットの中のマスターキーを使って暗号化されたものはどうなってしまうのだろうか。
また時間のある時に試してみようと思う。