No Oracle, No Life.

Oracle 製品と戯れる日々の記録。

ソフトウェア・キーストア・パスワードに外部ストアを使用する

12cR2から、透過的データ暗号化のソフトウェア・キーストアまたはハードウェアの
キーストアのパスワードに、外部ストアを使用できるようになっています。

今までは、キーストアのオープン、クローズ、バックアップなどの操作に対して
ADMINISTER KEY MANAGEMENT文を実行するときに、パスワードを入力する必要が
ありました。スクリプトでこの操作を実行する場合は、平文でパスワードが
ハードコードされることになり、セキュリティ上の問題となります。

12cR2からは、外部ストアを使用することにより、パスワードの代わりに
「EXTERNAL STORE」を含めれば、操作ができるようになりました。
これにより、パスワードを平文でハードコードすることがなくなります。

実際に検証環境でやってみました。

<環境>
Oracle Linux 6.6
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 – 64bit Production

 
1. キーストアの設定
キーストアを格納するディレクトリを作成します。

–キーストア用
[oracle@node01 ~]$ mkdir /u01/app/oracle/admin/orcl/wallet
–外部ストア用
[oracle@node01 ~]$ mkdir /u01/app/oracle/admin/orcl/wallet/external_store

 
次に、sqlnet.ora に ENCRYPTION_WALLET_LOCATION を設定します。キーストアを格納するパスを記載します。

※sqlnet.ora に以下を追記

ENCRYPTION_WALLET_LOCATION=
 (SOURCE=
  (METHOD=FILE)
  (METHOD_DATA=
   (DIRECTORY=/u01/app/oracle/admin/orcl/wallet)))

 
外部ストアは、12cR2から追加された初期化パラメータである、「EXTERNAL_KEYSTORE_CREDENTIAL_LOCATION」に格納場所を設定します。
設定後、データベースを再起動します。

SQL> alter system set EXTERNAL_KEYSTORE_CREDENTIAL_LOCATION = “/u01/app/oracle/admin/orcl/wallet/external_store” scope=spfile;

システムが変更されました。

SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area 1073741824 bytes
Fixed Size 8801008 bytes
Variable Size 763364624 bytes
Database Buffers 297795584 bytes
Redo Buffers 3780608 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL> show parameter EXTERNAL_KEYSTORE_CREDENTIAL_LOCATION

NAME TYPE VALUE
————————————- ———– ————————————————
external_keystore_credential_location string /u01/app/oracle/admin/orcl/wallet/external_store

 
2. キーストアの作成
いよいよ、キーストアを作成します。キーストアを作成するだけでなく、
外部ストアも作成します。外部ストアの作成については、日本語マニュアル
「Oracle Database Advanced Securityガイド」に情報が見つけられず、
非常に苦労をしました。英語マニュアル「Database Advanced Security Guide」
には、コマンドが載っていました。

Database Advanced Security Guide
Configuring an External Store for a Keystore Password
https://docs.oracle.com/database/122/ASOAG/configuring-transparent-data-encryption.htm#ASOAG10474

–キーストアの作成
SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE ‘/u01/app/oracle/admin/orcl/wallet’ IDENTIFIED BY password;

キーストアが変更されました。

–外部ストアの作成
SQL> ADMINISTER KEY MANAGEMENT ADD SECRET ‘password’ FOR CLIENT ‘TDE_WALLET’ TO LOCAL AUTO_LOGIN KEYSTORE ‘/u01/app/oracle/admin/orcl/wallet/external_store’;

キーストアが変更されました。

 
さぁ、実際にキーストアをオープンしてみます。
通常は、設定したパスワード(上記だと、”password”)を入力しなければなりませんが、
外部ストアを作成したことにより、”EXTERNAL STORE”を設定することでオープンが可能になります。

SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY EXTERNAL STORE CONTAINER = ALL;

キーストアが変更されました。

SQL> select * from v$encryption_wallet;

WRL_TYPE
——————–
WRL_PARAMETER
——————————————————————————–
STATUS WALLET_TYPE WALLET_OR FULLY_BAC
—————————— ——————– ——— ———
CON_ID
———-
FILE
/u01/app/oracle/admin/orcl/wallet/
OPEN_NO_MASTER_KEY PASSWORD SINGLE UNDEFINED
1

 
もちろん、まだマスターキーを作成していないので、からっぽですが。
ちなみに、コマンドでもありましたが、ローカル自動オープンキーストアの
仕組みを使用しているせいか、外部ストアのファイルは、「cwallet.sso」となっています。

[oracle@node01 ~]$ ls -lrt /u01/app/oracle/admin/orcl/wallet/external_store
合計 4
-rw——- 1 oracle oinstall 3915 3月 16 22:16 2017 cwallet.sso

 
また、外部ストアを損失しても、設定したパスワードがわかっていれば、
問題なくキーストアの操作は可能です。復旧も、再作成すれば元通りになります。
設定が間違っていたり、正しく認識されていないと、ORA-00988エラーが発生します。

SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY EXTERNAL STORE CONTAINER = ALL;
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY EXTERNAL STORE CONTAINER = ALL
*
行1でエラーが発生しました。:
ORA-00988: パスワードが指定されていないか、または無効です。

 
透過的データは設定も容易で簡単に暗号化設定ができる分、キーストアの扱いで
考慮すべき点がありますので、それを助けてくれる新機能があるのはうれしいですね!
他の機能も見ていきたいと思います!

コメントは受け付けていません。