機能の適用範囲
OceanBase データベース Community Edition は、現在データの透過的暗号化をサポートしていません。
このセクションでは、新規作成したテーブルに対して透過的データ暗号化を有効にするための、暗号化テーブルスペースの作成方法について説明します。
OceanBase データベースにおけるデータの暗号化単位はテーブルスペースです。OceanBase データベースは複数のデータファイルを持つデータベースシステムではないため、テーブルスペースは互換性のために設計された概念であり、簡単に言えばテーブルスペースは一連のテーブルの集合であると理解できます。
このセクションでは、暗号化テーブルスペース sectest_ts1 にテーブル t1 を作成する例を挙げ、透過的データ暗号化の操作手順を説明します。手順は以下の 2 つです:
- 暗号化方式を設定します。本記事では
internal方式とobcloud方式の設定例を示します。 - テーブルスペースを作成し、暗号化アルゴリズムを指定します。本記事では
aes-256を例に説明します。
使用上の制限
- システムテナントでは暗号化を有効にできません。
- テナントで透過的データ暗号化が設定されると、テナントを再構築しない限り、他の暗号化モードに切り替えることはできません。
暗号化の設定
このセクションでは internal 方式と obcloud 方式の設定例を示します。
internal 方式の透過的データ暗号化の設定
internal 方式のテナントマスターキーに関する暗号化情報は、主に内部テーブルで管理されます。ログ再生時の循環依存を回避するため、この暗号化方式では clog は暗号化されません。
管理者ユーザーがクラスタの MySQL テナントにログインします。
以下のステートメントを実行して、internal 方式の透過的データ暗号化を有効にします。
パラメータ
tde_methodは、透過的テーブルスペース暗号化の方式を設定するために使用されます。デフォルト値はnoneで、透過的テーブルスペース暗号化が無効であることを意味します。パラメータ
tde_methodの詳細については、tde_methodを参照してください。注意
パラメータ
tde_methodは一度設定すると、変更できなくなります。obclient> ALTER SYSTEM SET tde_method='internal';以下のステートメントを実行し、テナント内のすべてのOBServerノードにおけるパラメータ
tde_methodの値がinternalであることを確認します。obclient> SHOW PARAMETERS LIKE 'tde_method';確認後、以下のステートメントを実行して、マスター暗号鍵を生成します。
説明
テナント内のすべてのOBServerノードにおけるパラメータ
tde_methodの値がすべてinternalである場合にのみ、このステートメントは正常に実行されます。obclient> ALTER INSTANCE ROTATE INNODB MASTER KEY;テーブル領域を作成し、暗号化アルゴリズムを指定します。
暗号化アルゴリズムとして
aes-256、aes-128、aes-192、sm4-cbc、aes-128-gcm、aes-192-gcm、aes-256-gcm、sm4-gcmを指定できます。'y'を使用した場合、デフォルトでAES-256が使用されます。例:
obclient> CREATE TABLESPACE sectest_ts1 encryption = 'y';
obcloud方式の透過的データ暗号化の設定
obcloud 方式は、統一されたKMSプロキシサービスを介してマスター暗号鍵を管理するシナリオに適しています。
- 管理者ユーザーがクラスタのMySQLテナントにログインします。
説明
手順2~5は、obcloud 方式における暗号化方式、KMS設定、およびテナントのマスター暗号鍵の準備に使用されます。本テナントで既にテナントマスター暗号鍵の生成(MySQLモード)で同様の設定を完了している場合は、これらの手順をスキップできます。読みやすさと操作の便宜のため、以下に全プロセスを再度詳細に記載します。
以下のステートメントを実行し、
obcloud方式の透過的データ暗号化を有効にします。パラメータ
tde_methodは透過的テーブル領域暗号化の方式を設定するために使用され、デフォルトはnoneで、透過的テーブル領域暗号化が無効であることを示します。パラメータ
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" }';確認後、以下のステートメントを実行して、マスターキーを生成します。
obclient> ALTER INSTANCE ROTATE INNODB MASTER KEY;テーブルスペースを作成し、暗号化アルゴリズムを指定します。
暗号化アルゴリズムとして
aes-256、aes-128、aes-192、sm4-cbc、aes-128-gcm、aes-192-gcm、aes-256-gcm、sm4-gcmを指定できます。'y'を使用した場合は、デフォルトで AES-256 が使用されます。obclient> CREATE TABLESPACE sectest_ts1 encryption = 'y';
注意
上記は例です。実際のKMSエンドポイントとキー情報に置き換えてください。詳細については、tde_methodおよびexternal_kms_infoを参照してください。
暗号化されたテーブルスペースに新しいテーブルを作成する
暗号化方式の設定が完了したら、暗号化されたテーブルスペースに新しいテーブルを作成できます。具体的な手順は以下のとおりです:
通常ユーザーでデータベースのMySQLテナントにログインします。
対応するデータベースに入ったら、テーブルを作成し、テーブルスペースを指定します。
obclient> CREATE TABLE t1 (id1 int, id2 int) TABLESPACE sectest_ts1;作成後、このテーブルに対応するすべてのトランザクションは暗号化される必要があります。
テーブルスペース内のテーブルが暗号化されているかどうかを確認します。
以下のステートメントを実行し、
encryptionalgが以前設定したaes-256であるかどうかを確認します。obclient> SELECT table_name,encryptionalg,encrypted FROM oceanbase.V$OB_ENCRYPTED_TABLES; +------------+---------------+-----------+ | table_name | encryptionalg | encrypted | +------------+---------------+-----------+ | t1 | aes-256 | YES | +------------+---------------+-----------+ 1 row in setencryptionalgがaes-256で、かつencryptedがYESの場合、テーブルの暗号化設定は成功しています。ビュー
V$OB_ENCRYPTED_TABLESのフィールドと説明については、V$OB_ENCRYPTED_TABLESを参照してください。