DBCAのコマンドライン・パラメータを試す / configureTDE

Oracle Database 21cで追加されたDBCAのオプション・パラメータの動作を確認します。
対象のパラメータは`configureTDE`です。DBCAでデータベースを作成する際にTDE（Transparent Data Encryption / 透過的データ暗号化）を構成します。

ヘルプによる用法は次の通りです。
```
[-configureTDE <true | false> Specify true to configure TDE wallet]
    [-sourceTdeWalletPassword <Specify password for source database TDE wallet>]
    [-tdeAlgorithm <Specify the TDE Algorithm Type. Default is AES128>]
    [-primaryDBTdeWallet <Specify the location for TDE wallet of primary database>]
    [-tdeWalletRoot <Specify the location for TDE wallet root init parameter>]
    [-pdbTDEPassword <Specify password for PDB TDE wallet>]
    [-encryptPDBTablespaces <Specify ALL to encrypt all Tablespaces or A comma separated list of name:value pairs with tablespace encryption to true/false. For example SYSTEM:true,SYSAUX:false>]
    [-tdeWalletModeForPDB <Type of keystore, either UNITED or ISOLATED. Default is UNITED>]
    [-tdeWalletLoginType <Specify the TDE Wallet Login Type, PASSWORD | AUTO_LOGIN  | LOCAL_AUTO_LOGIN. Default is PASSWORD for SI and AUTO_LOGIN is default for RAC]
    [-encryptTablespaces <Specify ALL to encrypt all Tablespaces or A comma separated list of name:value pairs with tablespace encryption to true/false. For example SYSTEM:true,SYSAUX:false>]
    [-sourcePdbTDEPassword <Specify password for source PDB TDE wallet and it is used only in creation of PDB from existing PDB which has TDE wallet>]
```
* まず`‐configureTDE true`を指定することでTDEウォレットを構成する。
* さらに細かな指定をする場合は従属するオプション・パラメータを指定する。
    * インデントされている`sourceTdeWalletPassword`以下のパラメータを任意選択

指定しようと思ったら項目がたくさんありますが、`configureTDE true`のみの指定で動作を確認してみます。

::: note warn
TDEの利用には適切なライセンスが必要です。
製品マニュアルの次の項をご参照ください。
* Oracle Databaseデータベース・ライセンス情報ユーザー・マニュアル, 21c
1.3 Oracle Database製品で許可される機能、オプションおよびManagement Pack
　[表1-11 セキュリティ](https://docs.oracle.com/cd/F39414_01/dblic/Licensing-Information.html#GUID-0F9EB85D-4610-4EDF-89C2-4916A0E7AC87) 
:::

# 構成
* Oracle Database 21c Enterprise Edition (21.3)
* Oracle Eneterprise Linux 8.2



# 実践
DBCAでデータベース作成を実行します。サイレントモードです。
オプション・パラメータで`-configureTDE true`を付けます。

```
$ dbca -silent -createDatabase -gdbName db21tde -templateName General_Purpose.dbc -configureTDE true
Enter SYS user password:

Enter SYSTEM user password:

Enter password for the TDE wallet:

Prepare for db operation
10% complete
Copying database files
・・・以下、略・・・
```
SYSパスワードとSYSTEMパスワードに加えてTDEウォレットのパスワードの入力が求められました。

以後はコマンドの完了まで処理が進みます。


## TDE関連ビューで設定を確認する
作成されたデータベース(CDB)にログインしてTDE関連の設定状態を確認してみます。

**暗号化表領域**
暗号化が適用されたのはUSERS表領域のみでした。
システム系の表領域も暗号化させるには`-encryptTablespaces`を指定する必要がありそうです。

:::note info
後日、`-encryptTablespaces ALL`を付け加えてdbcaを実行してみました。
ページ末尾の補足情報をご参照ください。
:::

```
SQL> SELECT TABLESPACE_NAME,ENCRYPTED FROM DBA_TABLESPACES ORDER BY 1;

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

SQL>
```

**暗号化アルゴリズム**
使用された暗号化アルゴリズムは AES128 です。
これはコマンドのヘルプにある`[-tdeAlgorithm <Specify the TDE Algorithm Type. Default is AES128>]`の通りです。
```
SQL> SELECT TS#,ENCRYPTIONALG,ENCRYPTEDTS FROM V$ENCRYPTED_TABLESPACES;

       TS# ENCRYPT ENC
---------- ------- ---
         4 AES128  YES

SQL>
```

**暗号化ウォレット**
暗号化ウォレットは次のような構成です。
```
SQL> SELECT * FROM V$ENCRYPTION_WALLET;

WRL_TYPE
--------------------
WRL_PARAMETER
--------------------------------------------------------------------------------
STATUS                         WALLET_TYPE          WALLET_OR KEYSTORE FULLY_BAC
------------------------------ -------------------- --------- -------- ---------
    CON_ID
----------
FILE
/u01/app/oracle/admin/db21tde/wallet_root/tde/
OPEN                           AUTOLOGIN            SINGLE    NONE     NO
         1

FILE

OPEN                           AUTOLOGIN            SINGLE    UNITED   NO
         2
```

ちなにみこのディレクトリの下にあるファイルは以下の通りです。
```
$ ls -l /u01/app/oracle/admin/db21tde/wallet_root/tde/
total 12
-rw------- 1 oracle oinstall 4040 Sep 19 17:37 cwallet.sso
-rw------- 1 oracle oinstall 2555 Sep 19 17:37 ewallet_2022091908375917.p12
-rw------- 1 oracle oinstall 3995 Sep 19 17:37 ewallet.p12
$
```



## TDE関連の初期化パラメータ設定を確認する
続いて初期化パラメータを確認してみます。

`WALLET_ROOT`と`TDE_CONFIGURATION`によってキーストアは統一モード[^1]で構成されています。

[^1]:キーストアの統一モードはOracle Database 18cから実装されている機能です。CDBとPDBのキーストアの管理の方法で統一モードと分離モードがあります。詳しくは製品マニュアルをご確認ください
```:WALLET_ROOT
SQL> SHOW PARAMETER WALLET_ROOT

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
wallet_root                          string      /u01/app/oracle/admin/db21tde/
                                                 wallet_root
SQL>
```

```:TDE_CONFIGURATION
SQL> SHOW PARAMETER TDE_CONFIGURATION

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
tde_configuration                    string      keystore_configuration=file
SQL>
```

:::note info
ちなみにTDEの構成を指定せずに作成したデータベースでは上記いずれもNULL（未設定）状態です。
:::

```: ENCRYPT_NEW_TABLESPACES
SQL> SHOW PARAMETER ENCRYPT_NEW_TABLESPACES

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
encrypt_new_tablespaces              string      ALWAYS
SQL>
```

```: TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM
SQL> SHOW PARAMETER TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
tablespace_encryption_default_algori string      AES128
thm
SQL>
```



# まとめ
DBCAでのデータベース作成時にTDEを構成できるのは便利です。

ただ、この記事で試したのはTDEのおおもとのTDE構成のみです。運用環境のデータベース構築に適用するには、製品マニュアルを参照してもう少し踏み込んだ確認が必要に思いました。


# 補足情報
* TDE構成有無での初期化パラメータ設定差異
本記事で示している初期化パラメータについては、TDE構成あり(`configureTDE true`)で作成したデータベースとそうでないデータベースでは下表のように違いがありました。

|初期化パラメータ|TDE構成あり|TDE構成なし|
|:-|:-:|:-:|
|wallet_root|$ORACLE_BASE/admin/<db_unique_name>/wallet_root|-|
|tde_configuration|keystore_configuration=file|‐|
|encrypt_new_tablespaces|ALWAYS|CLOUD_ONLY|
|tablespace_encryption_default_algorithm|AES128|AES128|

* sqlnet.oraファイルの構成状態
DBCAでのTDE構成によるsqlnet.oraファイルには特に変化はありませんでした。
初期化パラメータ`WALLET_ROOT`が使用されているためsqlnet.oraファイルに`SQLNET.ENCRYPTION_WALLET_LOCATION`に関する記述はないようです。
:::note info 
データベース・リファレンスの初期化パラメータWALLET_ROOTの項には次の注意書きがあります。
> ノート:SQLNET.ENCRYPTION_WALLET_LOCATIONパラメータはOracle Database 18cでは非推奨です。
:::
```
$ ls -l $ORACLE_BASE_HOME/network/admin/sqlnet.ora*
-rw-r----- 1 oracle oinstall 197 Feb 21  2022 /u01/app/oracle/homes/OraDB21Home3/network/admin/sqlnet.ora
$

$ cat /u01/app/oracle/homes/OraDB21Home3/network/admin/sqlnet.ora
# sqlnet.ora Network Configuration File: /u01/app/oracle/homes/OraDB21Home3/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)

$
```

* 全表領域の暗号化指定での確認
後日、`-encryptTablespaces ALL`を付け加えてdbcaを実行してみました。
初期構成される表領域はすべて暗号化状態です。
```:実行コマンド
$ dbca -silent -createDatabase -gdbName db21tde2 -templateName General_Purpose.dbc -configureTDE true -encryptTablespaces ALL 
```

```:表領域の暗号化状態確認
$ export ORACLE_SID=db21tde2
$ sqlplus / as sysdba 
・・・中略・・・
SQL> SELECT TABLESPACE_NAME,ENCRYPTED FROM DBA_TABLESPACES ORDER BY 1;

TABLESPACE_NAME                ENC
------------------------------ ---
SYSAUX                         YES
SYSTEM                         YES
TEMP                           YES
UNDOTBS1                       YES
USERS                          YES

SQL>
```