このドキュメントでは、列暗号化機能に関するよくある質問を解説します。
暗号化された列データをSQLで非暗号化列に書き込む場合(例:INSERT INTO ... SELECT ...)、クエリ時に新しい列は暗号文なのか平文なのか?
INSERT INTO ... SELECT ...を実行するユーザーが対応する平文データへのアクセス権限を持っている場合、挿入されるのは平文です。クエリ時も平文として返されます(テーブルに別の暗号化ルールが設定されていない限り)。INSERT INTO ... SELECT ...を実行するユーザーが対応する平文データへのアクセス権限を持っていない場合、この操作は許可されません。
暗号化列の列名を変更した後も、暗号化ルールの保護を受けるか?
列暗号化ルールの適用は、列名の変更の影響を受けません。列名が変更されても、その列は引き続き暗号化ルールの保護を受けます。
関数内で暗号化列を使用する場合(例:SELECT CAST(id AS CHAR), name, password FROM test_01;)、クエリ時は暗号文なのか平文なのか?
クエリで投影される列に暗号化列が含まれる場合、その投影列全体が暗号化されて返されます。
暗号化列に対して非暗号化列の値を設定する場合
暗号化列に対して非暗号化列の値を設定する場合(例:UPDATE test_01 SET age = id + 2;)、このステートメントを実行するユーザーが平文データへのアクセス権限を持っている場合、非暗号化列の値は平文として処理されます。そうでない場合、ユーザーはこのステートメントを実行できません。
暗号化列と平文列の計算結果
暗号化列と平文列を計算する場合(例:SELECT CONCAT(id, name) FROM test_01;)、結果は暗号化されて返されます。
バックアップ・リストアが列暗号化ルールに与える影響
テナントレベルでのバックアップ・リストア時には、列暗号化ルールが復元されます。しかし、テーブルレベルのリストア機能では独立したオブジェクトが復元されるため、ソーステーブルの列暗号化ルールや権限を継承することは困難です。そのため、ソーステーブルに列暗号化ルールが含まれる場合は、業務上、テーブルレベルでリストアされたデータに対して別途アクセス制御を追加する必要があるかどうかを評価することを推奨します。
IV文字列はどのように生成されるのか?
ENCRYPTIONタイプのルールを使用する場合、暗号化アルゴリズムが初期化ベクトル(IV)文字列を必要とすると、データベースが暗号化段階でランダムに生成します。各列(投影列、データ列ではない)のデータには異なるランダムなIVが使用され、ユーザーが固定のIVを明示的に指定することはサポートされていません。