列暗号化機能は、OceanBaseデータベースが提供するデータ保護メカニズムであり、結果を返す際に暗号化ルールに基づいて暗号文を返すことで、データベースに保存される機密データを保護します。本記事では、列暗号化機能とその原理について説明し、例を示します。
注意
この機能はV4.3.5 BP3からサポートされており、MySQLテナントモードにのみ適用されます。
機能の適用性
OceanBaseデータベースCommunity Editionは現在、列暗号化をサポートしていません。
動作原理
データベース管理者またはユーザーレベルのCREATE SENSITIVE RULE権限を持つユーザーは、既存のテーブルに対して列レベルの機密データ保護ルールを作成できます。ある列Aがデータ保護ルールRによって保護対象の列として指定されている場合、ユーザーがSELECT操作を実行し、投影される列にA列が含まれていると、データベースはユーザーがこのルールRに対する平文アクセス権限を持っているかどうかを確認します。
ユーザーがルール
Rに対する平文アクセス権限を持っている場合:A列を含む投影式は通常通り平文の結果を返します。ユーザーがルール
Rに対する平文アクセス権限を持っていない場合:A列を含む投影式は、ルールの記述に従って暗号化された後、ユーザーに返されます。
データ保護ルール
CREATE SENSITIVE RULE構文を使用して機密ルールを作成します。構文は以下のとおりです:
CREATE SENSITIVE RULE <rule_name>
ON <sensitive_field_list>
USING ENCRYPTION [ = <encryption_method>];
具体的な説明は以下のとおりです:
- データ保護ルール:現在サポートされているデータ保護ルールは
ENCRYPTIONタイプです。ルール作成時に暗号化アルゴリズムを指定できます。 - ルールの範囲:各ルールで1つ以上の列を保護することができ、データベース間やテーブル間での保護も可能です。1つの列は最大でも1つのデータ保護ルールによってのみ保護されます。
- 権限要件:ルールを作成するユーザーは、ユーザーレベルの
CREATE SENSITIVE RULE権限と、これらの列に対する完全なアクセス権限(SELECT、INSERT、UPDATE、REFERENCES権限を含む)を同時に持っている必要があります。ルールを作成したユーザーは、自動的にそのルールに対する平文アクセス権限を取得します。
権限メカニズム
- ユーザーレベルの平文アクセス権限:特定のユーザーがユーザーレベルの平文アクセス権限を持っている場合、そのユーザーはデータ保護ルールの影響を受けず、平文データにアクセスできます。
- ルールレベルの平文アクセス権限:特定のユーザーが特定のルールに対する平文アクセス権限を持っている場合、そのユーザーはそのルールの影響を受けず、そのルールによって保護されたデータに対して平文でアクセスできます。
- 権限のないユーザー:ユーザーがユーザーレベルの平文アクセス権限も、特定のルールに対する平文アクセス権限も持っていない場合、そのユーザーがそのルールによって保護された列をクエリすると、暗号化されたデータしか表示されません。
関数暗号化との違い
ENHANCED_AES_ENCRYPT関数は、OceanBaseデータベースにおけるAES暗号化方式の一種です。
| 機能 | 列暗号化機能 | ENHANCED_AES_ENCRYPT関数 |
|---|---|---|
| 使用方法 | DDLによるルール設定 | SQLステートメントでの手動呼び出し |
| 権限管理 | ルールに基づく細かい粒度の権限管理 | ENCRYPT権限が必要 |
| クエリ体験 | 権限に応じて自動的に平文/暗号文を返す | 常に暗号文を返し、手動で復号する必要がある |
| インデックスサポート | 暗号化された列インデックスをサポート | サポートされているが、特別な処理が必要 |
| アプリケーション互換性 | 既存アプリケーションと完全互換 | アプリケーションコードの変更が必要 |