宣言
ENHANCED_AES_ENCRYPT(plaintext[, iv])
説明
この関数は主にデータのAES暗号化に使用されます。この機能の有効化は
tde_methodパラメータで制御されます。詳細についてはtde_methodを参照してください。この関数に必要な権限は
ENCRYPTです。plaintextはAES暗号化を行う平文です。[, iv]はオプションパラメータで、初期化ベクトルを表します。この関数で使用されるキーは、テナントの現在のマスターキーです。暗号化アルゴリズムはデフォルトでAES-128-ECBですが、システム変数block_encryption_modeの値を設定することで暗号化アルゴリズムを変更できます。サポートされているのはAESタイプの暗号化アルゴリズムのみです。
AES-128-CFB1など、初期化ベクトル
ivが必要な暗号化アルゴリズムをサポートしています。このようなアルゴリズムを使用して暗号化・復号化を行う場合、初期化ベクトルivを関数の2番目のパラメータとして明示的に指定する必要があります。ivの最小長は16バイトです。キーローテーションは復号化操作に影響しません。
例
INSERT / UPDATE ステートメントでは、暗号化が必要な列に対して暗号化関数を明示的に使用します。
-- plaintextを暗号化してtblテーブルのcipher_col列に書き込む
-- 値のリストのいずれかの値で暗号化関数が使用されている場合、対応する権限が必要です
INSERT INTO tbl(cipher_col, ...) VALUES(ENHANCED_AES_ENCRYPT(plaintext), ...);
-- 暗号文列を更新する
UPDATE tbl SET cipher_col = ENHANCED_AES_ENCRYPT(plaintext) WHERE ...;
SELECT ステートメントは、暗号文列を直接クエリして暗号文を返します。
-- 暗号文列をクエリする
SELECT cipher_col FROM tbl;
暗号文と対応する平文を直接比較することはサポートされていません。暗号文を復号化するか、平文を暗号化してから比較する必要があります。
-- cipher_colは暗号文列、12345は平文データで、対応する暗号文データが見つかりません
SELECT ... FROM tbl WHERE cipher_col = '12345';
-- LIKEステートメントも同様に、対応する暗号文データが見つかりません
SELECT ... FROM tbl WHERE cipher_col LIKE '123%';
-- 平文データ '12345' を暗号化した後、現在のキーで暗号化された暗号文データとマッチすることが期待され、インデックスを利用できます。
SELECT ... FROM tbl WHERE cipher_col = ENHANCED_AES_ENCRYPT('12345');
-- 暗号化された列は通常の列として、比較を含むさまざまな計算に使用できます
SELECT ... FROM tbl WHERE tbl.cipher_col = another_tbl.another_cipher_col;
SELECT ... FROM tbl GROUP BY cipher_col ORDER BY cipher_col;