有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

数据库字段类型支持情况

字段类型
字段加密
字段模糊查询
字段脱敏
char
AES/SM4
支持
支持
varchar
AES/SM4
支持
支持
tinytext
AES/SM4
支持
支持
text
AES/SM4
支持
支持
mediumtext
AES/SM4
支持
支持
longtext
AES/SM4
支持
支持
tinyint
-
-
支持
smallint
-
-
支持
mediumint
-
-
支持
int/integer
-
-
支持
bigint
-
-
支持
float
-
-
支持
double
-
-
支持
decimal
-
-
支持
tinyblob
-
-
-
blob
-
-
-
longblob
-
-
-
date
-
-
-
time
-
-
-
year
-
-
-
datetime
-
-
-
timestamp
-
-
-

功能支持和使用限制

数据库

支持 MySQL 5.7及以上版本的数据库和兼容 MySQL 协议的数据库(如 TDSQLMariaDB)。
不支持8.0及以上版本新增的 SQL 语法。
数据库、表和字段名不区分大小写。
加密字段长度需预先扩容以支持存储明文加密后更大长度的密文。

字符集

character_set_connection必须为utf8utf8mb4,即仅只支持客户端或应用使用 utf8utf8mb4 字符集连接代理。
加密字段需使用区分大小写collation,如 utf8_general_bin

连接

同一连接内不允许切换登录用户。
应用连接代理的账号认证方式支持 mysql_native_password
代理连接后端数据库的账号认证方式支持 mysql_native_passwordcaching_sha2_password
CASB 代理集群升级时会造成连接中断,请确保业务支持连接断开后的自动重连。

加解密和脱敏

加解密算法支持 AESSM4 算法。
支持对字符串和二进制类型字段的加解密。
支持对字符串和数值类型字段的动态脱敏。
支持两个及以上连续字符的密文模糊查询,仅支持LIKE语法,且 LIKE 匹配区分大小写,不支持正则查询。
配置密文模糊查询策略的字段值必须为空或不少于两个字符。
密文模糊查询不支持转义字符,不支持NO_BACKSLASH_ESCAPES选项。
加密后密文超过字段长度时会保存明文
加密字段作为查询条件,且同时存在密文和明文时,只能查询到密文数据,存量明文数据需全量加密成密文;加密字段不作为查询条件时,可正常查询所有数据。
支持 SELECT, INSERT, REPLACE, UPDATE, DELETE 语句中 WHERE、ON、IN、INSERT VALUE、SET 等各字段中非表达式、非函数内的原始字面值加解密。
支持 ROW 条件中非表达式的值加解密,如支持 where (id, 'n2' , addr)=(2, name,'a2') 中的字段加解密。
支持 table referenceswhere condition 中的子查询字段中非表达式的值加解密。
UNION 语句使用第一个 SELECT 子句 的加解密策略。
不支持存储过程的加解密。
不支持 INSERT INTO ... SELECT ... 等不经过代理处理的数据的加解密。
连接查询时,JOIN连接字段需选择同样的密钥和加密算法,否则密文不一致,无法正确进行连接查询。
支持GROUP BY, 但不保证和明文一致的顺序。
information_schemasysmysql 等内置数据库不支持加解密和脱敏。

协议

支持 COM_QUERY,COM_STMT_PREPARECOM_STMT_EXECUTE 协议中字段加解密。
不支持 COM_STMT_SEND_LONG_DATACOM_STMT_RESET 协议。
不支持 COM_QUERY Protocol::LOCAL_INFILE_Data 协议。

语句

DML 执行前,需先切换到或指定相应的库。
加密字段不支持函数操作。
加密字段不支持数学运算。
加密字段不支持 ORDER BY
加密字段不支持正则查询。
不支持包含自定义变量的语句。
不支持 SELECT INTO 语句。
不支持 mysqldump 中使用 CASB 不支持的特性和条件。
不支持 CREATE TABLE xx AS SELECTCHECK TABLECHECKSUM TABLE 语法。
不支持 TDSQL 自定义的管理语法, 如 help, repair 等。
不支持 COM_QUERY 协议PrepareExecute 语句的加解密。
除了 TDSQL 增删改查语句的行首注释外,SQL 语句中的其余注释不会生效。
TDSQL 的 ShardKey 字段不能配置加密。

binlog

其他

所有表结构必须预先在策略控制台定义,账号必须和相应数据源绑定后才能通过 proxy 操作相应的数据源。
数据源删除后重新添加时,需断开存量连接,建立新的 MySQL 连接查询。
单次查询处理的数据大小需小于2^24字节。

常用 SQL 语句支持情况

说明
示例中已配置加密策略的字段名称为:crypto_column。
插入语句
类型
支持情况
SQL 样例
指定列名插入加密字段
支持
INSERT INTO table_a (id, col1, col2, crypto_column) VALUES (1, 'a', 'b', 'c');
不指定列名插入加密字段
支持
INSERT INTO table_a VALUES (1, 'a', 'b', 'c');
删除语句
类型
支持情况
SQL 样例
加密字段作为查询条件
支持
DELETE FROM table_a WHERE crypto_column = 'c';
加密字段作为子查询语句的查询条件
支持
DELETE FROM table_a WHERE col1 IN (SELECT col2 FROM table_b WHERE crypto_column = 'c');
更新语句
类型
支持情况
SQL 样例
加密字段作为查询条件
支持
UPDATE table_a SET col1 = 'd' WHERE crypto_column = 'c';
更新加密字段
支持
UPDATE table_a SET crypto_column = 'd' WHERE id = 1;
查询语句
类型
支持情况
SQL 样例
加密字段作为返回结果,SELECT语法的支持
支持
SELECT crypto_column FROM table_a;
加密字段作为返回结果,SELECT *语法的支持
支持
SELECT * FROM table_a;
加密字段使用别名
支持
SELECT crypto_column a, col2 b FROM table_a;
加密字段作为查询条件, 等值匹配
支持
SELECT * FROM table_a WHERE crypto_column = 'c';
加密字段作为查询条件,IN条件查询
支持
SELECT * FROM table_a WHERE crypto_column IN ('a', 'b', 'c');
加密字段作为子查询的条件
支持
SELECT crypto_column FROM (select * FROM table_a WHERE crypto_column = 'c') a;
JOIN查询,加密字段作为WHERE条件
支持
SELECT table_a.id FROM table_a JOIN table_b ON table_a.id = table_b.id WHERE table_a.crypto_column = 'c';
JOIN查询,加密字段作为ON条件
支持
SELECT table_a.id FROM table_a JOIN table_b ON table_a.id = table_b.id AND table_a.crypto_column = 'c';
JOIN查询,加密字段作为返回结果
支持
SELECT table_a.crypto_column FROM table_a JOIN table_b ON table_a.id = table_b.id;
JOIN查询,加密字段作为连表条件
支持:连表的加密字段需配置相同密钥和算法
SELECT table_a.id FROM table_a JOIN table_b ON table_a.crypto_column = table_b.crypto_column;
GROUP BY 加密字段
支持
SELECT * FROM table_a WHERE id>10 GROUP BY crypto_column;
ORDER BY 加密字段
不支持
SELECT * FROM table_a WHERE id>10 ORDER BY crypto_column;
加密字段模糊查询
支持:需配置密文模糊检索算法
SELECT * FROM table_a WHERE crypto_column LIKE '%cc%';
加密字段正则查询
不支持
SELECT * FROM table_a WHERE crypto_column REGEXP '^cc';
加密字段范围查询
不支持
SELECT * FROM table_a WHERE crypto_column > 'a' AND crypto_column < 'd';
函数处理加密字段
不支持
SELECT * FROM table_a WHERE substr(crypto_column, 0, 2) = 'aa';