このドキュメントでは、列暗号化機能に関するいくつかのよくある質問について説明します。
INSERT INTO ... SELECT ... のように、暗号化された列データをSQLで暗号化されていない列に書き込む場合、クエリ時に新しい列は暗号文なのか平文なのか?
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; のような場合、結果は暗号化されて返されます。
バックアップ・リカバリが列暗号化ルールに与える影響
テナントレベルのバックアップ・リカバリを行う際、列暗号化ルールは復元されます。しかし、テーブルレベルのリカバリ機能では、独立したオブジェクトが復元されるため、ソーステーブルの列暗号化ルールや権限を継承することは困難です。そのため、ソーステーブルに列暗号化ルールが含まれている場合は、テーブルレベルでリカバリされたデータに対して個別のアクセス制御を追加する必要があるかどうか、業務上の評価を行うことを推奨します。