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