数据加解密 #
语法 | 描述 | 类型 |
---|---|---|
CREATE ENCRYPT RULE encryptRuleDefinition [, encryptRuleDefinition] … | 创建加密规则 | RDL |
ALTER ENCRYPT RULE encryptRuleDefinition [, encryptRuleDefinition] … | 修改加密规则 | RDL |
DROP ENCRYPT RULE tableName [, tableName] … | 删除加密规则 | RDL |
SHOW ENCRYPT RULES [FROM databaseName] SHOW ENCRYPT TABLE RULE tableName [FROM databaseName] | 查看加密规则 | RQL |
COUNT ENCRYPT RULE | 统计加密规则的数量,在后续版本中将废弃此语法 | RQL |
CREATE ENCRYPT KEY MANAGER keyManagerName keyManagerDefinition | 创建密钥管理规则 | RDL |
ALTER ENCRYPT KEY MANAGER keyManagerName keyManagerDefinition | 修改密钥管理规则 | RDL |
DROP ENCRYPT KEY MANAGER ifExists? keyManagerName | 删除密钥管理规则 | RDL |
select [,string] … [,] decrypt({tableName}, {encryptColumn}, {encryptValue}), [,string] … | 查询解密结果 | RQL |
CONVERT TABLE tableName BY ENCRYPT RULE … | 将非加密表转换为加密表 | RDL |
CONVERT TABLE tableName ADD PLAIN addPlainColumnsDefinition | 为加密表添加明文列 | RDL |
CONVERT TABLE tableName DROP PLAIN dropColumnsDefinition | 为加密表移除明文列 | RDL |
CONVERT TABLE tableName ADD LIKE addLikeColumnsDefinition | 为加密表添加模糊查询列 | RDL |
CONVERT TABLE tableName DROP LIKE dropColumnsDefinition | 为加密表移除模糊查询列 | RDL |
ALTER ENCRYPT RULE setQueryWithPlainItem (’,’ setQueryWithPlainItem)* SET QUERY_WITH_PLAIN ‘=’ booleanLiterals | 切换明文查询开关 | RDL |
CONVERT TABLE tableName DROP ENCRYPT RULE | 将加密表转换为非加密表 | RDL |
1. 创建加密规则 #
CreateEncryptRule ::=
'CREATE' 'ENCRYPT' 'RULE' ifNotExists? encryptDefinition (',' encryptDefinition)* (',' queryWithPlainOrCipher)?
ifNotExists ::=
'IF' 'NOT' 'EXISTS'
encryptDefinition ::=
ruleName '(' 'COLUMNS' '(' columnDefinition (',' columnDefinition)* ')' (',' queryWithPlainOrCipher)? ')'
columnDefinition ::=
'(' 'NAME' '=' columnName (',' 'DATA_TYPE' '=' dataType)? (',' 'PLAIN' '=' plainColumnName)? ',' 'CIPHER' '=' cipherColumnName (',' 'CIPHER_DATA_TYPE' '=' dataType)? (',' 'ASSISTED_QUERY' '=' assistedQueryColumnName (',' 'ASSISTED_QUERY_DATA_TYPE' '=' dataType)?)? (',' 'LIKE_QUERY' '=' likeQueryColumnName (',' 'LIKE_QUERY_DATA_TYPE' '=' dataType)?)? ',' encryptAlgorithmDefinition (',' assistedQueryAlgorithmDefinition)? (',' likeQueryAlgorithmDefinition)? (',' queryWithPlainOrCipher)? ')'
encryptAlgorithmDefinition ::=
'ENCRYPT_ALGORITHM' '(' 'TYPE' '(' 'NAME' '=' encryptAlgorithmType (',' propertiesDefinition)? ')'
assistedQueryAlgorithmDefinition ::=
'ASSISTED_QUERY_ALGORITHM' '(' 'TYPE' '(' 'NAME' '=' encryptAlgorithmType (',' propertiesDefinition)? ')'
likeQueryAlgorithmDefinition ::=
'LIKE_QUERY_ALGORITHM' '(' 'TYPE' '(' 'NAME' '=' encryptAlgorithmType (',' propertiesDefinition)? ')'
propertiesDefinition ::=
'PROPERTIES' '(' key '=' value (',' key '=' value)* ')'
queryWithPlainOrCipher ::=
: ('QUERY_WITH_CIPHER_COLUMN' | 'QUERY_WITH_PLAIN') '=' ('TRUE' | 'FALSE')
;
tableName ::=
identifier
columnName ::=
identifier
dataType ::=
string
plainColumnName ::=
identifier
cipherColumnName ::=
identifier
assistedQueryColumnName ::=
identifier
likeQueryColumnName ::=
identifier
encryptAlgorithmType ::=
string
key ::=
string
value ::=
literal
参数说明
参数解释 #
名称 | 数据类型 | 说明 |
---|---|---|
tableName | IDENTIFIER | 表名称 |
columnName | IDENTIFIER | 逻辑列名称 |
DATA_TYPE | IDENTIFIER | 逻辑列数据类型 |
PLAIN | IDENTIFIER | 明文列名称 |
CIPHER | IDENTIFIER | 加密列名称 |
CIPHER_DATA_TYPE | IDENTIFIER | 加密列数据类型 |
ASSISTED_QUERY_COLUMN | IDENTIFIER | 辅助查询列 1.5.0 前参数,已做兼容,目前可用 |
ASSISTED_QUERY | IDENTIFIER | 辅助查询列 1.5.0 后参数,推荐使用 |
ASSISTED_QUERY_DATA_TYPE | IDENTIFIER | 辅助查询列数据类型 |
LIKE_QUERY_COLUMN | IDENTIFIER | 模糊查询列 1.5.0 前参数,已做兼容,目前可用 |
LIKE_QUERY | IDENTIFIER | 模糊查询列 1.5.0 后参数,推荐使用 |
LIKE_QUERY_DATA_TYPE | IDENTIFIER | 模糊查询列数据类型 |
ENCRYPT_ALGORITHM | STRING | 加密算法名称 |
ASSISTED_QUERY_ALGORITHM | STRING | 辅助查询算法 |
LIKE_QUERY_ALGORITHM | STRING | 模糊查询算法 |
PLAIN
指定明文数据列,CIPHER
指定密文数据列,创建加密规则后,Proxy 将禁止对明文列、密文列进行除 ADD COLUMN 外的 DDL 操作encryptAlgorithmType
指定加密算法类型,请参考 加密算法- 重复的
tableName
将无法被创建 QUERY_WITH_CIPHER_COLUMN
使用密文列查询:支持大写或小写的 true 或 false,支持表级别和列级别以及全局级别的设置,与QUERY_WITH_PLAIN
互斥QUERY_WITH_PLAIN
使用明文列查询:支持大写或小写的 true 或 false,支持表级别和列级别以及全局级别的设置,与QUERY_WITH_CIPHER_COLUMN
互斥ASSISTED_QUERY
辅助查询列:不能与逻辑列重名,在用户的 CIPHER (加密字段)以及对应的加密算法无法支持查询时,可以配置该字段用来辅助查询。例如用户配置的加密算法对于同一个值进行多次加密的结果不同,那么就无法使用 CIPHER (加密字段)进行查询,这时候就需要使用辅助查询列进行查询。辅助查询列对应的算法一般可以使用不可逆的算法,但是对于同一个值进行多次加密的结果需要相同LIKE_QUERY
模糊查询列:不能与逻辑列重名,用于帮助用户进行 like 查询时使用的列。一般 CIPHER (加密字段) 配置的算法无法支持 like 查询,所以当用户需要使用 like查询时,需要配置模糊查询列以及对应的模糊查询算法ASSISTED_QUERY_ALGORITHM
辅助查询算法:即辅助查询列对应的算法。一般是不可逆,并且多次加密结果一致的算法LIKE_QUERY_ALGORITHM
模糊查询算法:即模糊查询列对应的算法,可以支持 like 查询的算法
示例
创建数据加密规则
CREATE ENCRYPT RULE t_encrypt (
COLUMNS (
(
NAME=merchant_name, DATA_TYPE='varchar(20)',
PLAIN=merchant_name_plain,
CIPHER=merchant_name_cipher, CIPHER_DATA_TYPE='varchar(100)',
ASSISTED_QUERY=merchant_name_assisted, ASSISTED_QUERY_DATA_TYPE='varchar(100)',
LIKE_QUERY=merchant_name_like, LIKE_QUERY_DATA_TYPE='varchar(50)',
ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
ASSISTED_QUERY_ALGORITHM(TYPE(NAME='MD5',PROPERTIES('salt'='121212'))),
LIKE_QUERY_ALGORITHM(TYPE(NAME='CHAR_DIGEST_LIKE',PROPERTIES('delta'='2'))), QUERY_WITH_CIPHER_COLUMN=true
)
), QUERY_WITH_PLAIN=true
);
使用 ifNotExists 子句创建数据加密规则
CREATE ENCRYPT RULE IF NOT EXISTS t_encrypt (
COLUMNS (
(
NAME=merchant_name, DATA_TYPE='varchar(20)',
PLAIN=merchant_name_plain,
CIPHER=merchant_name_cipher, CIPHER_DATA_TYPE='varchar(100)',
ASSISTED_QUERY=merchant_name_assisted, ASSISTED_QUERY_DATA_TYPE='varchar(100)',
LIKE_QUERY=merchant_name_like, LIKE_QUERY_DATA_TYPE='varchar(50)',
ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
ASSISTED_QUERY_ALGORITHM(TYPE(NAME='MD5',PROPERTIES('salt'='121212'))),
LIKE_QUERY_ALGORITHM(TYPE(NAME='CHAR_DIGEST_LIKE',PROPERTIES('delta'='2'))), QUERY_WITH_CIPHER_COLUMN=true
)
), QUERY_WITH_PLAIN=true
);
2. 修改加密规则 #
ALTEREncryptRule ::=
'ALTER' 'ENCRYPT' 'RULE' encryptDefinition (',' encryptDefinition)* (',' queryWithPlainOrCipher)?
encryptDefinition ::=
ruleName '(' 'COLUMNS' '(' columnDefinition (',' columnDefinition)* ')' (',' queryWithPlainOrCipher)? ')'
columnDefinition ::=
'(' 'NAME' '=' columnName (',' 'DATA_TYPE' '=' dataType)? (',' 'PLAIN' '=' plainColumnName)? ',' 'CIPHER' '=' cipherColumnName (',' 'CIPHER_DATA_TYPE' '=' dataType)? (',' 'ASSISTED_QUERY' '=' assistedQueryColumnName (',' 'ASSISTED_QUERY_DATA_TYPE' '=' dataType)?)? (',' 'LIKE_QUERY' '=' likeQueryColumnName (',' 'LIKE_QUERY_DATA_TYPE' '=' dataType)?)? ',' encryptAlgorithmDefinition (',' assistedQueryAlgorithmDefinition)? (',' likeQueryAlgorithmDefinition)? (',' queryWithPlainOrCipher)? ')'
encryptAlgorithmDefinition ::=
'ENCRYPT_ALGORITHM' '(' 'TYPE' '(' 'NAME' '=' encryptAlgorithmType (',' propertiesDefinition)? ')'
assistedQueryAlgorithmDefinition ::=
'ASSISTED_QUERY_ALGORITHM' '(' 'TYPE' '(' 'NAME' '=' encryptAlgorithmType (',' propertiesDefinition)? ')'
likeQueryAlgorithmDefinition ::=
'LIKE_QUERY_ALGORITHM' '(' 'TYPE' '(' 'NAME' '=' encryptAlgorithmType (',' propertiesDefinition)? ')'
propertiesDefinition ::=
'PROPERTIES' '(' key '=' value (',' key '=' value)* ')'
queryWithPlainOrCipher ::=
: ('QUERY_WITH_CIPHER_COLUMN' | 'QUERY_WITH_PLAIN') '=' ('TRUE' | 'FALSE')
;
tableName ::=
identifier
columnName ::=
identifier
dataType ::=
string
plainColumnName ::=
identifier
cipherColumnName ::=
identifier
assistedQueryColumnName ::=
identifier
likeQueryColumnName ::=
identifier
encryptAlgorithmType ::=
string
key ::=
string
value ::=
literal
参数说明
名称 | 数据类型 | 说明 |
---|---|---|
tableName | IDENTIFIER | 表名称 |
columnName | IDENTIFIER | 逻辑列名称 |
DATA_TYPE | IDENTIFIER | 逻辑列数据类型 |
PLAIN | IDENTIFIER | 明文列名称 |
CIPHER | IDENTIFIER | 加密列名称 |
CIPHER_DATA_TYPE | IDENTIFIER | 加密列数据类型 |
ASSISTED_QUERY_COLUMN | IDENTIFIER | 辅助查询列 1.5.0 前参数,已做兼容,目前可用,等同于 ASSISTED_QUERY |
ASSISTED_QUERY | IDENTIFIER | 辅助查询列 1.5.0 后参数,推荐使用,等同于 ASSISTED_QUERY_COLUMN |
ASSISTED_QUERY_DATA_TYPE | IDENTIFIER | 辅助查询列数据类型 |
LIKE_QUERY_COLUMN | IDENTIFIER | 模糊查询列 1.5.0 前参数,已做兼容,目前可用,等同于 LIKE_QUERY |
LIKE_QUERY | IDENTIFIER | 模糊查询列 1.5.0 后参数,推荐使用,等同于 LIKE_QUERY_COLUMN |
LIKE_QUERY_DATA_TYPE | IDENTIFIER | 模糊查询列数据类型 |
ENCRYPT_ALGORITHM | STRING | 加密算法名称 |
ASSISTED_QUERY_ALGORITHM | STRING | 辅助查询算法 |
LIKE_QUERY_ALGORITHM | STRING | 模糊查询算法 |
PLAIN
指定明文数据列,CIPHER
指定密文数据列,创建加密规则后,Proxy 将禁止对明文列、密文列进行除 ADD COLUMN 外的 DDL 操作encryptAlgorithmType
指定加密算法类型,请参考 加密算法- 重复的
tableName
将无法被创建 QUERY_WITH_CIPHER_COLUMN
使用密文列查询:支持大写或小写的 true 或 false,支持表级别和列级别以及全局级别的设置,与QUERY_WITH_PLAIN
互斥QUERY_WITH_PLAIN
使用明文列查询:支持大写或小写的 true 或 false,支持表级别和列级别以及全局级别的设置,与QUERY_WITH_CIPHER_COLUMN
互斥ASSISTED_QUERY
辅助查询列:不能与逻辑列重名,在用户的 CIPHER (加密字段)以及对应的加密算法无法支持查询时,可以配置该字段用来辅助查询。例如用户配置的加密算法对于同一个值进行多次加密的结果不同,那么就无法使用 CIPHER (加密字段)进行查询,这时候就需要使用辅助查询列进行查询。辅助查询列对应的算法一般可以使用不可逆的算法,但是对于同一个值进行多次加密的结果需要相同LIKE_QUERY
模糊查询列:不能与逻辑列重名,用于帮助用户进行 like 查询时使用的列。一般 CIPHER (加密字段) 配置的算法无法支持 like 查询,所以当用户需要使用 like查询时,需要配置模糊查询列以及对应的模糊查询算法ASSISTED_QUERY_ALGORITHM
辅助查询算法:即辅助查询列对应的算法。一般是不可逆,并且多次加密结果一致的算法LIKE_QUERY_ALGORITHM
模糊查询算法:即模糊查询列对应的算法,可以支持 like 查询的算法
示例
ALTER ENCRYPT RULE t_encrypt (
COLUMNS (
(
NAME=merchant_name, DATA_TYPE='varchar(20)',
PLAIN=merchant_name_plain,
CIPHER=merchant_name_cipher, CIPHER_DATA_TYPE='varchar(100)',
ASSISTED_QUERY=merchant_name_assisted, ASSISTED_QUERY_DATA_TYPE='varchar(100)',
LIKE_QUERY=merchant_name_like, LIKE_QUERY_DATA_TYPE='varchar(50)',
ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
ASSISTED_QUERY_ALGORITHM(TYPE(NAME='MD5',PROPERTIES('salt'='121212'))),
LIKE_QUERY_ALGORITHM(TYPE(NAME='CHAR_DIGEST_LIKE',PROPERTIES('delta'='2'))), QUERY_WITH_CIPHER_COLUMN=true
)
), QUERY_WITH_PLAIN=true
);
3. 删除加密规则 #
示例
删除加密规则
DROP ENCRYPT RULE t_encrypt, t_encrypt_2;
使用 ifExists 删除加密规则
DROP ENCRYPT RULE IF EXISTS t_encrypt, t_encrypt_2;
4. 查看加密规则 #
SHOW ENCRYPT RULES [FROM databaseName]
示例
查询所有的数据加密规则
mysql> SHOW ENCRYPT RULES FROM encrypt_db;
+------------+---------------+-----------------+----------------------+------------------+---------------------+-----------------+------------------------+--------------------------+--------------------+----------------------+----------------+-------------------------+---------------------+----------------------+------------------+------------------+--------------------------+
| table | logic_column | logic_data_type | cipher_column | cipher_data_type | plain_column | plain_data_type | assisted_query_column | assisted_query_data_type | like_query_column | like_query_data_type | encryptor_type | encryptor_props | assisted_query_type | assisted_query_props | like_query_type | like_query_props | query_with_plain |
+------------+---------------+-----------------+----------------------+------------------+---------------------+-----------------+------------------------+--------------------------+--------------------+----------------------+----------------+-------------------------+---------------------+----------------------+------------------+------------------+--------------------------+
| t_merchant | merchant_name | varchar(20) | merchant_name_cipher | varchar(100) | merchant_name_plain | varchar(20) | merchant_name_assisted | varchar(100) | merchant_name_like | varchar(50) | AES | aes-key-value=123456abc | MD5 | salt=121212 | CHAR_DIGEST_LIKE | delta=2 | true |
+------------+---------------+-----------------+----------------------+------------------+---------------------+-----------------+------------------------+--------------------------+--------------------+----------------------+----------------+-------------------------+---------------------+----------------------+------------------+------------------+--------------------------+
1 rows in set (0.78 sec)
查询指定加密规则
示例
mysql> SHOW ENCRYPT TABLE RULE t_encrypt;
+------------+---------------+-----------------+----------------------+------------------+---------------------+-----------------+------------------------+--------------------------+--------------------+----------------------+----------------+-------------------------+---------------------+----------------------+------------------+------------------+--------------------------+
| table | logic_column | logic_data_type | cipher_column | cipher_data_type | plain_column | plain_data_type | assisted_query_column | assisted_query_data_type | like_query_column | like_query_data_type | encryptor_type | encryptor_props | assisted_query_type | assisted_query_props | like_query_type | like_query_props | query_with_plain |
| t_encrypt | merchant_name | varchar(20) | merchant_name_cipher | varchar(100) | merchant_name_plain | varchar(20) | merchant_name_assisted | varchar(100) | merchant_name_like | varchar(50) | AES | aes-key-value=123456abc | MD5 | salt=121212 | CHAR_DIGEST_LIKE | delta=2 | true |
+------------+---------------+-----------------+----------------------+------------------+---------------------+-----------------+------------------------+--------------------------+--------------------+----------------------+----------------+-------------------------+---------------------+----------------------+------------------+------------------+--------------------------+
2 rows in set (0.01 sec)
mysql> SHOW ENCRYPT TABLE RULE t_encrypt FROM encrypt_db;
+------------+---------------+-----------------+----------------------+------------------+---------------------+-----------------+------------------------+--------------------------+--------------------+----------------------+----------------+-------------------------+---------------------+----------------------+------------------+------------------+--------------------------+
| table | logic_column | logic_data_type | cipher_column | cipher_data_type | plain_column | plain_data_type | assisted_query_column | assisted_query_data_type | like_query_column | like_query_data_type | encryptor_type | encryptor_props | assisted_query_type | assisted_query_props | like_query_type | like_query_props | query_with_plain |
+------------+---------------+-----------------+----------------------+------------------+---------------------+-----------------+------------------------+--------------------------+--------------------+----------------------+----------------+-------------------------+---------------------+----------------------+------------------+------------------+--------------------------+
| t_encrypt | merchant_name | varchar(20) | merchant_name_cipher | varchar(100) | merchant_name_plain | varchar(20) | merchant_name_assisted | varchar(100) | merchant_name_like | varchar(50) | AES | aes-key-value=123456abc | MD5 | salt=121212 | CHAR_DIGEST_LIKE | delta=2 | true |
+------------+---------------+-----------------+----------------------+------------------+---------------------+-----------------+------------------------+--------------------------+--------------------+----------------------+----------------+-------------------------+---------------------+----------------------+------------------+------------------+--------------------------+
2 rows in set (0.01 sec))
输出说明
列 | 说明 |
---|---|
table | 逻辑表名 |
logic_column | 逻辑列名 |
logic_data_type | 逻辑列数据类型 |
cipher_column | 密文列名 |
cipher_data_type | 密文列数据类型 |
plain_column | 明文列名 |
plain_data_type | 明文列数据类型 |
assisted_query_column | 辅助查询列名 |
assisted_query_data_type | 辅助查询列数据类型 |
assisted_query_type | 辅助查询算法类型 |
assisted_query_props | 辅助查询算参数 |
like_query_column | 模糊查询列 |
like_query_data_type | 模糊查询列数据类型 |
like_query_type | 模糊查询算法类型 |
like_query_props | 模糊查询算参数 |
encryptor_type | 加密算法类型 |
encryptor_props | 加密算法参数 |
query_with_plain | 是否使用明文列进行查询 |
5. 创建密钥管理规则 #
createEncryptKeyManager
: CREATE ENCRYPT KEY MANAGER keyManagerName keyManagerDefinition
;
keyManagerDefinition
: TYPE (NAME = keyManagerName [, PROPERTIES ([keyManagerProperties]) ])
;
keyManagerProperties:
keyManagerProperty [, keyManagerProperty] ...
keyManagerProperty:
key=value
参数说明
名称 | 数据类型 | 说明 |
---|---|---|
keyManagerName | STRING | 密钥管理器名称 |
示例
本地密钥管理
CREATE ENCRYPT KEY MANAGER local_key_manage (
TYPE(NAME='LOCAL',PROPERTIES("aes-key-value"="123456abc"))
);
云端密钥管理
CREATE ENCRYPT KEY MANAGER aws_key_manage (
TYPE(NAME='SphereEx:AWS_KMS',PROPERTIES(
"access-key"="aaaaa",
"secret-key"="bbbbb",
"aws-region"="us-east-1",
"secret-name"="testA"))
);
6. 修改密钥管理规则 #
alterEncryptKeyManager
: ALTER ENCRYPT KEY MANAGER keyManagerName keyManagerDefinition
;
keyManagerDefinition
: TYPE (NAME = keyManagerName [, PROPERTIES ([keyManagerProperties]) ])
;
keyManagerProperties:
keyManagerProperty [, keyManagerProperty] ...
keyManagerProperty:
key=value
参数说明
名称 | 数据类型 | 说明 |
---|---|---|
keyManagerName | STRING | 密钥管理器名称 |
示例 |
本地密钥管理
ALTER ENCRYPT KEY MANAGER local_key_manage (
TYPE(NAME='LOCAL',PROPERTIES("aes-key-value"="123456abcd"))
);
云端密钥管理
ALTER ENCRYPT KEY MANAGER aws_key_manage (
TYPE(NAME='SphereEx:AWS_KMS',PROPERTIES(
"access-key"="aaaaa",
"secret-key"="bbbbb",
"aws-region"="us-east-1",
"secret-name"="testB"))
);
7. 删除密钥管理规则 #
DROP ENCRYPT KEY MANAGER ifExists? keyManagerName;
参数说明
名称 | 数据类型 | 说明 |
---|---|---|
keyManagerName | STRING | 密钥管理器名称 |
示例
DROP ENCRYPT KEY MANAGER ifExists Aws_key_Manager;
8. 查询解密结果 #
select 用法一致,提供 decrypt() 函数,tableName 为需要解密的表,encryptColumn 为需要解密的列, encryptValue 为需要解密的真实值。使用时需要配置对应的加密规则。
select [,string] … [,] decrypt({tableName}, {encryptColumn}, {encryptValue}), [,string] …
示例
SELECT 'Lm04PRW+sp+mG/QuimAUew==', decrypt(t_user, pwd_cipher, 'Lm04PRW+sp+mG/QuimAUew==') UNION SELECT 'XXX', decrypt(t_user, pwd_cipher, 'XXX');
9. 将非加密表转换为加密表 #
语法
convertEncryptTable
: CONVERT TABLE tableName BY ENCRYPT RULE encryptTableRuleDefinition startEncryptingJob?
;
startEncryptingJob
: ',' START_ENCRYPTING_JOB '=' booleanLiterals
;
booleanLiterals
: true | false
;
- 用于将普通单表转换为加密表,执行结果包括:
- 执行 DDL,创建加密规则需要的衍生列
- 创建加密规则
- 若 startEncryptingJob 为 true,自动触发洗数任务
- 支持 MySQL、Oracle 和 Hive 类型的存储单元
参数说明
名称 | 数据类型 | 说明 |
---|---|---|
tableName | IDENTIFIER | 表名 |
encryptTableRuleDefinition | TEXT | 加密规则定义,与 CREATE ENCRYPT RULE 中的格式一致 |
booleanLiterals | BOOLEAN | 布尔值 |
示例
CONVERT TABLE t_single BY ENCRYPT RULE (
COLUMNS(
(NAME=username, DATA_TYPE='varchar(100)', PLAIN=username,
CIPHER=cipher_column, CIPHER_DATA_TYPE='varchar(200)',
ASSISTED_QUERY_COLUMN=assisted_column, ASSISTED_QUERY_DATA_TYPE='varchar(300)',
LIKE_QUERY=like_column, LIKE_QUERY_DATA_TYPE='varchar(400)',
ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
ASSISTED_QUERY_ALGORITHM(TYPE(NAME='MD5')),
LIKE_QUERY_ALGORITHM(TYPE(NAME='CHAR_DIGEST_LIKE'))
)
), QUERY_WITH_PLAIN=true, START_ENCRYPTING_JOB=TRUE);
10. 为加密表添加明文列 #
语法
convertTableAddPlain
: CONVERT TABLE tableName ADD PLAIN addPlainColumnsDefinition
;
addPlainColumnsDefinition
: COLUMNS '(' columnName (',' columnName)* ')' startDecryptingJob?
;
startDecryptingJob
: ',' START_DECRYPTING_JOB '=' booleanLiterals
;
booleanLiterals
: true | false
;
- 用于为已有加密表添加明文列,执行结果包括:
- 执行 DDL,创建加密规则需要的明文列
- 修改加密规则
- 若 startDecryptingJob 为 true,自动触发反洗数任务
- 支持 MySQL、Oracle 和 Hive 类型的存储单元
参数说明
名称 | 数据类型 | 说明 |
---|---|---|
tableName | IDENTIFIER | 表名 |
columnName | IDENTIFIER | 逻辑列名 |
booleanLiterals | BOOLEAN | 布尔值 |
示例
CONVERT TABLE t_encrypt ADD PLAIN COLUMNS(password), START_DECRYPTING_JOB=TRUE;
11. 为加密表移除明文列 #
语法
convertTableDropPlain
: CONVERT TABLE tableName DROP PLAIN dropColumnsDefinition
;
dropColumnsDefinition
: COLUMNS '(' columnName (',' columnName)* ')'
;
- 用于为已有加密表移除明文列,执行结果包括:
- 执行 DDL,删除指定的明文列
- 修改加密规则
- 支持 MySQL 和 Oracle 类型的存储单元
参数说明
名称 | 数据类型 | 说明 |
---|---|---|
tableName | IDENTIFIER | 表名 |
columnName | IDENTIFIER | 逻辑列名 |
示例
CONVERT TABLE t_encrypt DROP PLAIN COLUMNS(password);
12. 为加密表添加模糊查询列 #
语法
convertTableAddLike
: CONVERT TABLE tableName ADD LIKE addLikeColumnsDefinition
;
addLikeColumnsDefinition
: '(' COLUMNS '(' likeColumnDefinition (',' likeColumnDefinition)* ')' startEncryptingJob? ')'
;
likeColumnDefinition
: '(' NAME '=' columnName ',' likeQueryColumnDefinition ',' likeQueryAlgorithm ')'
;
likeQueryColumnDefinition
: (LIKE_QUERY | LIKE_QUERY_COLUMN) '=' likeQueryColumnName (',' LIKE_QUERY_DATA_TYPE '=' dataType)?
;
likeQueryAlgorithm
: LIKE_QUERY_ALGORITHM '(' algorithmDefinition ')'
;
startEncryptingJob
: ',' START_ENCRYPTING_JOB '=' booleanLiterals
;
booleanLiterals
: true | false
;
- 用于为已有加密表添加模糊查询列,执行结果包括:
- 执行 DDL,创建加密规则需要的 like 列
- 修改加密规则
- 若 startEncryptingJob 为 true,自动触发洗数任务(仅洗 like 列)
- 支持 MySQL、Oracle 和 Hive 类型的存储单元
参数说明
名称 | 数据类型 | 说明 |
---|---|---|
tableName | IDENTIFIER | 表名 |
columnName | IDENTIFIER | 逻辑列名 |
likeQueryColumnName | IDENTIFIER | like 列名 |
dataType | STRING | 数据类型 |
booleanLiterals | BOOLEAN | 布尔值 |
示例
CONVERT TABLE t_encrypt ADD like (
COLUMNS(
(name=password,
LIKE_QUERY=password_like,
LIKE_QUERY_DATA_TYPE='varchar(200)',
LIKE_QUERY_ALGORITHM(TYPE(NAME='CHAR_DIGEST_LIKE')))
), START_ENCRYPTING_JOB=TRUE
);
13. 为加密表移除模糊查询列 #
语法
convertTableDropLike
: CONVERT TABLE tableName DROP LIKE dropColumnsDefinition
;
dropColumnsDefinition
: COLUMNS '(' columnName (',' columnName)* ')'
;
- 用于为已有加密表移除 like 列,执行结果包括:
- 执行 DDL,删除指定的 like 列
- 修改加密规则
- 支持 MySQL 和 Oracle 类型的存储单元
参数说明
名称 | 数据类型 | 说明 |
---|---|---|
tableName | IDENTIFIER | 表名 |
columnName | IDENTIFIER | 逻辑列名 |
示例
CONVERT TABLE t_encrypt DROP LIKE COLUMNS(password);
14. 切换明文查询开关 #
语法
alterEncryptRuleSetQueryWithPlain
: ALTER ENCRYPT RULE setQueryWithPlainItem (',' setQueryWithPlainItem)* SET QUERY_WITH_PLAIN '=' booleanLiterals
;
setQueryWithPlainItem
: tableName ('(' columnName (',' columnName)* ')')?
;
booleanLiterals
: true | false
;
参数说明
名称 | 数据类型 | 说明 |
---|---|---|
tableName | IDENTIFIER | 表名 |
columnName | IDENTIFIER | 逻辑列名 |
示例
-- 整表切换
ALTER ENCRYPT RULE t_encrypt SET QUERY_WITH_PLAIN = true;
-- 指定列切换
ALTER ENCRYPT RULE t_encrypt(password) SET QUERY_WITH_PLAIN = false;
15. 将加密表转换为非加密表 #
语法
convertTableDropEncryptRule
: CONVERT TABLE tableName DROP ENCRYPT RULE
;
- 用于将加密表转换为非加密表,执行结果包括:
- 执行 DDL,删除为加密规则创建的衍生列
- 删除加密规则
- 支持 MySQL 和 Oracle 类型的存储单元
参数说明
名称 | 数据类型 | 说明 |
---|---|---|
tableName | IDENTIFIER | 表名 |
示例
CONVERT TABLE t_single DROP ENCRYPT RULE;