※ 本記事は2018年1月10日に公開されたものです。
透過的データ暗号化機能は、Oracle Database Enterprise Editionであれば、バイナリの追加インストールなしでそのまま利用することができます。Oracle Database Standard Editionを利用している場合には、Enterprise Editionへのアップグレードが必要となります。(もちろん利用にはEnterprise EditionとAdvanced Securityオプションのライセンスを持っていることが前提となります。)
透過的データ暗号化を利用するためにはまず暗号鍵を構成する必要があります。「[第57回] 透過的データ暗号化機能」で説明した通り、データベース管理者が管理する鍵はマスター鍵と呼ばれる鍵1つだけです。マスター鍵はOracle Keystore(以降キーストアと表記)と呼ばれるファイルもしくはHSM(Hardware Security Module)に格納できますが、今回はOracle Keystoreを利用します。
キーストアを構成するためには、まずキーストアを配置するディレクトリをsqlnet.oraファイルに記述します。sqlnet.oraファイルはデフォルトでは$ORACLE_HOME/network/adminにあるファイルが参照されます。
ENCRYPTION_WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /opt/oracle/admin/orcl/wallet)))
次にキーストアを作成します。
キーストアの作成はSQL*PlusからADMINISTER KEY MANAGEMENT文でおこないます。ADMINISTER KEY MANAGEMENTはデータベースインストール時に指定した暗号鍵管理グループに所属するユーザーか暗号鍵管理権限(SYSKM)を持つユーザーで実行する必要があります。
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/opt/oracle/admin/orcl/wallet' IDENTIFIED BY oracle12c;
ここで「’/opt/oracle/admin/orcl/wallet’」はsqlnet.oraファイルで指定したキーストアの場所を、「oracle12c」はキーストアのパスワードを示しています。
作成が成功すると、指定した場所にewallet.p12というファイルが作成されます。しかし、この状態ではキーストアは利用可能な状態ではないため、以下のコマンドで利用可能な状態にします。
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY oracle12c;
上記のコマンドでキーストアが利用可能な状態となります。なお、データベースを一度停止させ、その後起動した際にはキーストアはデフォルトでは利用できない状態です。データベース起動後には毎回上記のコマンドを発行する必要があります。
なお、後述の自動オープンキーストアを利用すると、データベース起動後にキーストアを利用可能な状態にすることもできます。
以上でキーストアの構成は完了です。続いて構成したキーストアにマスター鍵を作成します。マスター鍵の作成のためのコマンドは以下の通りです。
ADMINISTER KEY MANAGEMENT SET KEY USING TAG 'マスター鍵v1' IDENTIFIED BY oracle12c WITH BACKUP;
ここでは「’マスター鍵v1’」というTAG名でマスター鍵を作成しています。TAG名には鍵が増えたときに識別できるようにわかりやすい名前を付けておいてください。
以上でマスター鍵の作成は完了です。
なお、12cでマルチテナント環境を利用している場合には、キーストアはすべてのPDBで単一のものを共有しますが、マスター鍵は各PDBで個別に持ちます。PDBで透過的データ暗号化機能を利用した場合には、PDBごとに個別にマスター鍵を作成してください。
マスター鍵が準備できると、暗号化表領域を作成できます。暗号化表領域を作成するにはCREATE TABLESPACE文に以下のようにENCRYPTION句とSTORAGE句のENCRYPTオプションのふたつを指定します。
create tablespace enctbs datafile '/opt/oracle/oradata/orcl/orclpdb/enctbs.dbf' size 10m encryption using 'aes256' default storage (encrypt);
ENCRYPTION句では利用する暗号化アルゴリズムを指定します。指定できる暗号化アルゴリズムと鍵長はAES256、AES192、AES128および3DES168で、指定を省略した際のデフォルトはAES128です。
暗号化表領域を作成したら、この表領域に表や索引などのオブジェクトを作成していくと、自動的に暗号化して保存されます。
さて、デフォルトの状態ではデータベースを起動するたびにキーストアを利用可能な状態にするコマンドを発行する必要があります。しかし、自動ログインキーストア機能を利用することで、キーストアを自動的に利用可能な状態にすることもできます。
自動ログインキーストアを作成するためには以下のコマンドを発行します。
ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/opt/oracle/admin/orcl/wallet' IDENTIFIED BY oracle12c;
このコマンドを発行すると指定したディレクトリにcwallet.ssoというファイルができ、このファイルをデータベースが参照することで、自動的にキーストアを利用可能な状態にすることができます。
