宣言
ENHANCED_AES_ENCRYPT(plaintext[, iv])
説明
この関数は主にデータのAES暗号化を行うために使用されます。この機能の有効化は
tde_methodパラメータで制御され、詳細についてはtde_methodを参照してください。この関数に必要な権限は
ENCRYPTです。plaintextはAES暗号化を行う平文です。[, iv]はオプションのパラメータで、初期化ベクトルを示します。この関数で使用される鍵は、テナントの現在のマスター鍵です。暗号化アルゴリズムはデフォルトでAES-256-CBCであり、システム変数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;