適用対象
OceanBaseデータベースCommunity Editionは、現在データの透過的暗号化をサポートしていません。
テーブルを暗号化されたテーブルスペースから移動することで、そのテーブルの暗号化を解除できます。
背景
テーブル t1 の暗号化状態が以下のとおりであり、テーブル t1 が暗号化されたテーブルスペース sectest_ts1 内にあると仮定します。
obclient> SELECT * FROM oceanbase.V$OB_ENCRYPTED_TABLES;
+----------+------------+---------------+---------------+-----------+----------------------------------+-------------+------------------+------------------+--------+--------+
| TABLE_ID | TABLE_NAME | TABLESPACE_ID | ENCRYPTIONALG | ENCRYPTED | ENCRYPTEDKEY | MASTERKEYID | BLOCKS_ENCRYPTED | BLOCKS_DECRYPTED | STATUS | CON_ID |
+----------+------------+---------------+---------------+-----------+----------------------------------+-------------+------------------+------------------+--------+--------+
| 500010 | t1 | 500009 | aes-256 | YES | xxxxxxxxxxxxxxxxxxxxxxxxxxxx7882 | xxxx08 | 0 | 0 | NORMAL | 0 |
+----------+------------+---------------+---------------+-----------+----------------------------------+-------------+------------------+------------------+--------+--------+
1 row in set
obclient> SHOW CREATE TABLE t1;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table
|
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t1 | CREATE TABLE `t1` (
`id1` int(11) DEFAULT NULL,
`id2` int(11) DEFAULT NULL
) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 TABLESPACE `sectest_ts1` |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set
テーブルを暗号化されたテーブルスペースから移動する
管理者ユーザーがデータベースのMySQLテナントにログインします。
テーブルに対して段階的なメジャーコンパクションを実行します。
progressive_merge_numの値を1より大きい数に設定し、段階的なメジャーコンパクションの準備としてOPTIMIZEコマンドを実行します。例:
obclient> ALTER TABLE t1 SET progressive_merge_num = 3; obclient> OPTIMIZE TABLE t1;手動で複数回の段階的なメジャーコンパクションを開始します。
1回の段階的なメジャーコンパクションを開始するステートメントは以下のとおりです:
obclient> ALTER SYSTEM MAJOR FREEZE;説明
暗号化の解除は非同期プロセスであり、データのすべてが復号されるように、テーブルに対して段階的なメジャーコンパクションを実行する必要があります。
暗号化されていないテーブルスペース
ts2を作成します。obclient> CREATE TABLESPACE ts2;テーブルが存在するデータベースにアクセスします。
テーブル
t1を暗号化されたテーブルスペースsectest_ts1から暗号化されていないテーブルスペースts2に移動します。obclient> ALTER TABLE t1 TABLESPACE ts2;操作が成功した後、
SHOW CREATE TABLEステートメントを実行すると、テーブルt1がテーブルスペースts2に移動されていることが確認できます。obclient> SHOW CREATE TABLE t1; +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | t2 | CREATE TABLE `t1` ( `id1` int(11) DEFAULT NULL, `id2` int(11) DEFAULT NULL ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 TABLESPACE `ts2` | +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in setoceanbase.V$OB_ENCRYPTED_TABLESビューを照会して、テーブルの暗号化状態を確認します。obclient> SELECT * FROM oceanbase.V$OB_ENCRYPTED_TABLES; +------------------+------------+------------------+---------------+-----------+--------------+-------------+------------------+------------------+------------+--------+ | TABLE_ID | TABLE_NAME | TABLESPACE_ID | ENCRYPTIONALG | ENCRYPTED | ENCRYPTEDKEY | MASTERKEYID | BLOCKS_ENCRYPTED | BLOCKS_DECRYPTED | STATUS | CON_ID | +------------------+------------+------------------+---------------+-----------+--------------+-------------+------------------+------------------+------------+--------+ | 500010 | t1 | 500015 | | NO | | 0 | 2 | 0 | NORMAL | 0 | +------------------+------------+------------------+---------------+-----------+--------------+-------------+------------------+------------------+------------+--------+ 1 row in setテーブル
t1のENCRYPTEDフィールドがNOであることがわかります。これは、テーブルt1の暗号化解除操作が成功したことを示しています。