このセクションでは、既存のテーブルに対して透過的データ暗号化を有効にする方法について説明します。
OceanBaseデータベースの暗号化は、形式上可能な限りOracleデータベースと互換性を持たせており、データの暗号化単位はテーブルスペース(Tablespace)です。OceanBaseデータベースは複数のデータファイルを持つデータベースシステムではないため、テーブルスペースは互換性のために設計されています。
このセクションでは、暗号化されたテーブルスペース sectest_ts1 上の既存テーブル t1 に対して暗号化を有効にする例を用いて、透過的データ暗号化の操作手順を説明します。
暗号化の設定
このセクションでは、internal方式とobcloud方式の設定例を示します。
internal方式の透過的データ暗号化を設定する
internal方式ではストレージマスターキーが使用され、暗号化情報は主に内部テーブルで管理されます。ログ再生時の循環依存を避けるため、このモードではclogは暗号化されません。
管理者ユーザーがクラスタのOracleテナントにログインします。
説明(マスターキー関連)
手順2~6は、
internal方式でtde_methodを設定し、検証パラメータを確認し、Keystoreの作成と開き、ADMINISTER KEY MANAGEMENT SET KEYを実行してテナントマスターキーを確立するために使用されます。当該テナントで同様の設定が既に完了している場合は、これらの手順をスキップし、直接暗号化テーブル領域を作成してください。説明と例については、テナントマスターキーの生成(Oracleモード)を参照してください。以下のステートメントを実行して、internal方式の透過的データ暗号化を有効にします。
パラメータ
tde_methodは、透過的テーブル領域暗号化の方式を設定するために使用されます。デフォルト値はnoneで、透過的テーブル領域暗号化が無効であることを示します。パラメータ
tde_methodの詳細な説明については、tde_methodを参照してください。注意
一度設定したパラメータ
は、後から変更できません。 obclient> ALTER SYSTEM SET tde_method='internal';以下のステートメントを実行して、当該テナント上のすべてのOBServerノードにおけるパラメータ
tde_methodの値がinternalであることを確認します。obclient> SHOW PARAMETERS LIKE 'tde_method';Keystoreを作成します。
SQLステートメントは以下のとおりです:
obclient>ADMINISTER KEY MANAGEMENT CREATE KEYSTORE keystore_name IDENTIFIED BY password;例:
obclient> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE sectest1 IDENTIFIED BY **3**;Keystoreを開きます。
SQLステートメントは以下のとおりです:
obclient> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY password;ここで、
passwordは前の手順で設定したKeystoreのキーです。例:
obclient> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY **3**;以下のステートメントを実行して、マスターキーを生成します。
obclient> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY password;ステートメント内の
passwordは、以前に設定したKeystoreのキーです。例:
obclient> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY **3**;テーブル領域を作成し、暗号化アルゴリズムを指定します。
暗号化アルゴリズムとして
aes-256、aes-128、aes-192、sm4-cbc、aes-128-gcm、aes-192-gcm、aes-256-gcm、sm4-gcmを指定できます。例:
obclient> CREATE TABLESPACE sectest_ts1 ENCRYPTION USING 'aes-256';
obcloud方式の透過的データ暗号化の設定
obcloud 方式は、統一されたKMSプロキシサービスを介してマスターキーを管理するシナリオに適しています。
- 管理者ユーザーがクラスタのOracleテナントにログインします。
説明
手順2~5は、obcloud 方式での暗号化方法、KMS設定、およびテナントのマスターキーの準備が整ったことを確認するものです。本テナントで既にテナントマスターキーの生成(Oracleモード)に従って同様の設定を完了している場合は、これらの手順をスキップできます。読みやすさと操作の便宜上、以下に全プロセスを再度詳細に記載します。
以下のステートメントを実行し、
obcloud方式の透過的データ暗号化を有効にします。パラメータ
tde_methodは、透過的テーブル領域暗号化の方式を設定するために使用されます。デフォルトはnoneで、透過的テーブル領域暗号化が無効であることを意味します。パラメータ
tde_methodの詳細については、tde_methodを参照してください。注意
一度設定したパラメータ
tde_methodは、後から変更できません。obclient> ALTER SYSTEM SET tde_method = 'obcloud';以下のステートメントを実行し、該当テナント上のすべてのOBServerノードにおけるパラメータ
tde_methodの値がobcloudであることを確認します。obclient> SHOW PARAMETERS LIKE 'tde_method';以下のステートメントを実行し、KMSプロキシサービスのパラメータを設定します。
obclient> ALTER SYSTEM SET external_kms_info = '{ "kms_host": "https://kms.example.oceanbase.com", "access_key_id": "LTAI****************", "access_key_secret": "your_access_key_secret", "cmk_id": "your_customer_master_key_id" }';設定完了後、テナントはKMSからマスターキーを取得します。
obcloud方式では、マスターキーはOCPまたはOceanBase Cloud KMSによって生成・管理されるため、internal方式のようにADMINISTER KEY MANAGEMENT CREATE KEYSTORE、SET KEYSTORE OPEN、SET KEYを実行する必要はありません。詳細については、テナントマスターキーの生成(Oracleモード)を参照してください。テーブル領域を作成し、暗号化アルゴリズムを指定します。
暗号化アルゴリズムとして
aes-256、aes-128、aes-192、sm4-cbc、aes-128-gcm、aes-192-gcm、aes-256-gcm、sm4-gcmを指定できます。例:
obclient> CREATE TABLESPACE sectest_ts1 ENCRYPTION USING 'aes-256';
注意
上記は external_kms_info のサンプル値です。実際のKMSエンドポイントとキー情報に置き換えてください。他のKMS接続形態を使用している場合は、フィールドの形式が異なる可能性があります。tde_method、external_kms_info、および テナントマスターキーの生成(Oracleモード)を参照してください。
既存のテーブルを暗号化テーブルスペースに移動する
暗号化方式の設定が完了したら、既存のテーブルを暗号化テーブルスペースに移動できます。具体的な手順は以下のとおりです:
通常ユーザーでデータベースのOracleテナントにログインします。
テーブル
t1をテーブルスペースsectest_ts1に移動します。obclient> ALTER TABLE t1 TABLESPACE sectest_ts1;インデックステーブルを変更し、そのテーブルのインデックスをテーブルスペース
sectest_ts1に追加します。例:
obclient> ALTER INDEX idx1 TABLESPACE sectest_ts1;
テーブルの透過的データ暗号化
一般ユーザーがデータベースのOracleテナントにログインします。
テーブルの
progressive_merge_numの値を設定し、テーブルに対してフルコンパクションまたはプログレッシブコンパクションを実行します。progressive_merge_numはテーブルのプログレッシブコンパクションのラウンド数を設定するために使用されます。デフォルト値は0で、増分コンパクションを意味します。値を1に設定すると、フルコンパクションを実行します。テーブルに対してメジャーコンパクション操作を実行する際、通常はフルコンパクション方式を使用します。テーブル内のデータ量が非常に多く、フルコンパクションを有効にすると単一のメジャーコンパクション処理時間が長くなりすぎる場合は、プログレッシブコンパクションの使用を推奨します。
テーブルに対してフルコンパクションを実行する
progressive_merge_numの値を1に設定します。obclient> ALTER TABLE t1 set progressive_merge_num = 1;手動で1ラウンドのメジャーコンパクションを開始します。
手動でメジャーコンパクションを開始する操作については、手動でメジャーコンパクションをトリガーするを参照してください。
説明
テーブルに対してフルコンパクションを実行した後、フルコンパクションが完了すると、すべてのテーブルデータの暗号化も完了します。この時点で、
V$OB_ENCRYPTED_TABLESビューを確認することで、暗号化の完了状況を直接確認できます。メジャーコンパクションが完了したら、
progressive_merge_numの値を0に戻します。obclient> ALTER TABLE t1 set progressive_merge_num = 0;
テーブルに対してプログレッシブコンパクションを実行する
progressive_merge_numの値を1より大きい数値に設定し、SHRINK SPACE操作を実行してプログレッシブコンパクションの準備をします。例:
obclient> ALTER TABLE t1 set progressive_merge_num = 3; obclient> ALTER TABLE t1 SHRINK SPACE;手動で複数ラウンドのプログレッシブコンパクションを開始し、テーブルおよびその上のインデックスのすべての既存マクロブロックの暗号化を完了させます。
1ラウンドのプログレッシブコンパクションを開始するステートメントは以下のとおりです:
obclient> ALTER SYSTEM MAJOR FREEZE;説明
プログレッシブコンパクションの進行中、
V$OB_ENCRYPTED_TABLESビューをクエリすることで、暗号化の進捗状況をリアルタイムで確認できます。
完了後、以下のビューを確認して、すべてのマクロブロックが暗号化されているかどうかを確認できます。
obclient> SELECT * FROM V$OB_ENCRYPTED_TABLES; +----------+------------+---------------+---------------+-----------+----------------------------------+-------------+------------------+------------------+--------+--------+ | TABLE_ID | TABLE_NAME | TABLESPACE_ID | ENCRYPTIONALG | ENCRYPTED | ENCRYPTEDKEY | MASTERKEYID | BLOCKS_ENCRYPTED | BLOCKS_DECRYPTED | STATUS | CON_ID | +----------+------------+---------------+---------------+-----------+----------------------------------+-------------+------------------+------------------+--------+--------+ | 500005 | T1 | 500004 | aes-256 | YES | xxxxxxxxxxxxxxxxxxxxxxxxxxxx66F3 | xxxx03 | 0 | 0 | NORMAL | 1010 | +----------+------------+---------------+---------------+-----------+----------------------------------+-------------+------------------+------------------+--------+--------+ 1 row in setクエリ結果において、
BLOCKS_DECRYPTEDフィールドの値が0であれば、すべてのマクロブロックが暗号化されています。ビュー
V$OB_ENCRYPTED_TABLESのフィールドおよび説明については、V$OB_ENCRYPTED_TABLESを参照してください。