首批通过分布式安全可靠测评,为关键业务系统打造
ENHANCED_AES_ENCRYPT
更新时间:2026-04-30 18:31:43
声明
ENHANCED_AES_ENCRYPT(plaintext[, iv])
说明
该函数主要用于列加密功能,该功能的开启通过
tde_method参数进行控制,详情参见 tde_method。该函数需要的权限为
ENCRYPT。plaintext为要进行 AES 加密的明文。[, iv]为可选参数,表示初始化向量。该函数使用的密钥为租户当前的主密钥。加密算法默认为 AES-128-ECB,可以通过设置系统变量 block_encryption_mode 的值来更改加密算法,仅支持 AES 类型的加密算法。
支持需要初始化向量
iv的加密算法,例如 AES-128-CFB1。使用这类算法进行加解密时,需要显式输入初始化向量iv作为函数的第二个参数。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;