このドキュメントでは、列暗号化機能に関する一般的な質問について説明します。
暗号化された列データを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を明示的に指定することはサポートされていません。