列暗号化機能は、OceanBaseデータベースが提供するデータ保護メカニズムであり、結果を返す際に暗号化ルールに従って暗号文を返すことで、データベースに保存される機密データを保護します。MySQLおよびOracleテナントモードをサポートしています。本記事では、列暗号化機能とその原理について説明し、例を示します。
機能の適用範囲
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、REFERENCE権限を含む)を同時に持っている必要があります。注意:ルールを作成したユーザーは、そのルールに対する平文アクセス権限を自動的に持つわけではありません。別途権限付与が必要です。
権限メカニズム
- ユーザーレベルの平文アクセス権限:ユーザーがユーザーレベルの平文アクセス権限を持っている場合、そのユーザーはデータ保護ルールの影響を受けず、平文データにアクセスできます。
- ルールレベルの平文アクセス権限:ユーザーが特定のルールに対する平文アクセス権限を持っている場合、そのユーザーはそのルールの影響を受けず、そのルールで保護されたデータに平文でアクセスできます。
- 権限のないユーザー:ユーザーがユーザーレベルの平文アクセス権限も、特定のルールに対する平文アクセス権限も持っていない場合、そのユーザーがそのルールで保護された列をクエリすると、暗号化されたデータのみが表示されます。
関数暗号化との違い
ENHANCED_AES_ENCRYPT 関数は、OceanBaseデータベースにおけるAES暗号化方式の一つです。
比較項目 |
機能 |
ENHANCED_AES_ENCRYPT 関数 |
|---|---|---|
| 使用方法 | DDLでルールを設定する | SQLステートメントで手動で呼び出す |
| 権限制御 | ルールに基づくきめ細かい権限 | ENCRYPT権限が必要 |
| クエリ体験 | 権限に応じて平文または暗号文を自動的に返す | 常に暗号文を返し、手動で復号する必要がある |
| インデックスサポート | 暗号化された列のインデックスをサポートする | サポートするが、特別な処理が必要 |
| アプリケーションの互換性 | 既存のアプリケーションと完全に互換性がある | アプリケーションコードを修正する必要がある |