语法清单 #
| 语法 | 描述 | 类型 |
|---|---|---|
| CONVERT TABLE tableName BY ENCRYPT RULE | 将非加密表转换为加密表 | RDL |
| SHOW DDL FOR CONVERT TABLE tableName BY ENCRYPT RULE | 查看将非加密表转换为加密表所需的 DDL | RQL |
| CONVERT TABLE tableName ADD PLAIN | 为加密表添加明文列 | RDL |
| SHOW DDL FOR CONVERT TABLE tableName ADD PLAIN | 查看添加明文列所需的 DDL | RQL |
| CONVERT TABLE tableName DROP PLAIN | 为加密表移除明文列 | RDL |
| SHOW DDL FOR CONVERT TABLE tableName DROP PLAIN | 查看移除明文列所需的 DDL | RQL |
| CONVERT TABLE tableName ADD LIKE | 为加密表添加模糊查询列 | RDL |
| SHOW DDL FOR CONVERT TABLE tableName ADD LIKE | 查看添加模糊查询列所需的 DDL | RQL |
| CONVERT TABLE tableName DROP LIKE | 为加密表移除模糊查询列 | RDL |
| SHOW DDL FOR CONVERT TABLE tableName DROP LIKE | 查看移除模糊查询列所需的 DDL | RQL |
| CONVERT TABLE tableName ADD ORDER | 为加密表添加排序查询列 | RDL |
| SHOW DDL FOR CONVERT TABLE tableName ADD ORDER | 查看添加排序查询列所需的 DDL | RQL |
| CONVERT TABLE tableName DROP ORDER | 为加密表移除排序查询列 | RDL |
| SHOW DDL FOR CONVERT TABLE tableName DROP ORDER | 查看移除排序查询列所需的 DDL | RQL |
| ALTER ENCRYPT RULE tableName SET QUERY_WITH_PLAIN | 切换明文查询开关 | RDL |
| CONVERT TABLE tableName DROP ENCRYPT RULE | 将加密表转换为非加密表 | RDL |
补充说明 #
CONVERT TABLE语句默认会执行 DDL。若需要先查看或手工执行 DDL,可先执行对应的SHOW DDL FOR CONVERT TABLE语句,再在CONVERT TABLE语句末尾追加SKIP_DDL=true。- 使用
SKIP_DDL=true时,目标衍生列或待删除列必须已经按SHOW DDL FOR CONVERT TABLE的结果处理完成。 SHOW DDL FOR CONVERT TABLE ... BY ENCRYPT RULE、SHOW DDL FOR CONVERT TABLE ... ADD LIKE和SHOW DDL FOR CONVERT TABLE ... ADD ORDER支持DATA_TYPE_PRIORITY=INPUT|CALCULATED,默认值为CALCULATED。
1. 将非加密表转换为加密表 #
语法
showDDLForConvertEncryptTable
: SHOW DDL FOR CONVERT TABLE tableName BY ENCRYPT RULE encryptTableRuleDefinition (',' dataTypePriorityDefinition)?
;
convertEncryptTable
: CONVERT TABLE tableName BY ENCRYPT RULE encryptTableRuleDefinition (',' skipDDL)?
;
encryptTableRuleDefinition
: '(' COLUMNS '(' encryptColumnDefinition (',' encryptColumnDefinition)* ')' queryWithPlainOrCipher? startEncryptingJob? ')'
;
startEncryptingJob
: ',' START_ENCRYPTING_JOB '=' booleanLiterals
;
booleanLiterals
: true | false
;
skipDDL
: SKIP_DDL '=' booleanLiterals
;
dataTypePriorityDefinition
: DATA_TYPE_PRIORITY '=' (INPUT | CALCULATED)
;
- 用于将普通单表转换为加密表,执行结果包括:
- 执行 DDL,创建加密规则需要的衍生列
- 创建加密规则
- 若 startEncryptingJob 为 true,自动触发洗数任务
- 支持 MySQL、Oracle 和 Hive 类型的存储单元
参数说明
| 名称 | 数据类型 | 说明 |
|---|---|---|
| tableName | IDENTIFIER | 表名 |
| encryptTableRuleDefinition | TEXT | 加密规则定义,与 CREATE ENCRYPT RULE 中的格式一致 |
| booleanLiterals | BOOLEAN | 布尔值 |
| skipDDL | BOOLEAN | 是否跳过 DDL 执行 |
| dataTypePriorityDefinition | TEXT | 查看 DDL 时的数据类型优先级,默认 CALCULATED |
示例
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);
SHOW DDL FOR CONVERT TABLE t_single BY ENCRYPT RULE (
COLUMNS(
(NAME=username, DATA_TYPE='varchar(100)', PLAIN=username,
CIPHER=cipher_column, CIPHER_DATA_TYPE='varchar(200)',
ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc')))
)
), QUERY_WITH_PLAIN=true, START_ENCRYPTING_JOB=FALSE), DATA_TYPE_PRIORITY=INPUT;
2. 为加密表添加明文列 #
语法
showDDLForConvertTableAddPlain
: SHOW DDL FOR CONVERT TABLE tableName ADD PLAIN addPlainColumnsDefinition
;
convertTableAddPlain
: CONVERT TABLE tableName ADD PLAIN addPlainColumnsDefinition (',' skipDDL)?
;
addPlainColumnsDefinition
: COLUMNS '(' columnName (',' columnName)* ')' startDecryptingJob?
;
startDecryptingJob
: ',' START_DECRYPTING_JOB '=' booleanLiterals
;
booleanLiterals
: true | false
;
skipDDL
: SKIP_DDL '=' booleanLiterals
;
- 用于为已有加密表添加明文列,执行结果包括:
- 执行 DDL,创建加密规则需要的明文列
- 修改加密规则
- 若 startDecryptingJob 为 true,自动触发反洗数任务
- 支持 MySQL、Oracle 和 Hive 类型的存储单元
参数说明
| 名称 | 数据类型 | 说明 |
|---|---|---|
| tableName | IDENTIFIER | 表名 |
| columnName | IDENTIFIER | 逻辑列名 |
| booleanLiterals | BOOLEAN | 布尔值 |
| skipDDL | BOOLEAN | 是否跳过 DDL 执行 |
示例
CONVERT TABLE t_encrypt ADD PLAIN COLUMNS(password), START_DECRYPTING_JOB=TRUE;
3. 为加密表移除明文列 #
语法
showDDLForConvertTableDropPlain
: SHOW DDL FOR CONVERT TABLE tableName DROP PLAIN dropColumnsDefinition
;
convertTableDropPlain
: CONVERT TABLE tableName DROP PLAIN dropColumnsDefinition (',' skipDDL)?
;
dropColumnsDefinition
: COLUMNS '(' columnName (',' columnName)* ')'
;
skipDDL
: SKIP_DDL '=' booleanLiterals
;
- 用于为已有加密表移除明文列,执行结果包括:
- 执行 DDL,删除指定的明文列
- 修改加密规则
- 支持 MySQL 和 Oracle 类型的存储单元
参数说明
| 名称 | 数据类型 | 说明 |
|---|---|---|
| tableName | IDENTIFIER | 表名 |
| columnName | IDENTIFIER | 逻辑列名 |
| skipDDL | BOOLEAN | 是否跳过 DDL 执行 |
示例
CONVERT TABLE t_encrypt DROP PLAIN COLUMNS(password);
4. 为加密表添加模糊查询列 #
语法
showDDLForConvertTableAddLike
: SHOW DDL FOR CONVERT TABLE tableName ADD LIKE addLikeColumnsDefinition (',' dataTypePriorityDefinition)?
;
convertTableAddLike
: CONVERT TABLE tableName ADD LIKE addLikeColumnsDefinition (',' skipDDL)?
;
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
;
skipDDL
: SKIP_DDL '=' booleanLiterals
;
dataTypePriorityDefinition
: DATA_TYPE_PRIORITY '=' (INPUT | CALCULATED)
;
- 用于为已有加密表添加模糊查询列,执行结果包括:
- 执行 DDL,创建加密规则需要的 like 列
- 修改加密规则
- 若 startEncryptingJob 为 true,自动触发洗数任务(仅洗 like 列)
- 支持 MySQL、Oracle 和 Hive 类型的存储单元
参数说明
| 名称 | 数据类型 | 说明 |
|---|---|---|
| tableName | IDENTIFIER | 表名 |
| columnName | IDENTIFIER | 逻辑列名 |
| likeQueryColumnName | IDENTIFIER | like 列名 |
| dataType | STRING | 数据类型 |
| booleanLiterals | BOOLEAN | 布尔值 |
| skipDDL | BOOLEAN | 是否跳过 DDL 执行 |
| dataTypePriorityDefinition | TEXT | 查看 DDL 时的数据类型优先级,默认 CALCULATED |
示例
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
);
5. 为加密表移除模糊查询列 #
语法
showDDLForConvertTableDropLike
: SHOW DDL FOR CONVERT TABLE tableName DROP LIKE dropColumnsDefinition
;
convertTableDropLike
: CONVERT TABLE tableName DROP LIKE dropColumnsDefinition (',' skipDDL)?
;
dropColumnsDefinition
: COLUMNS '(' columnName (',' columnName)* ')'
;
skipDDL
: SKIP_DDL '=' booleanLiterals
;
- 用于为已有加密表移除 like 列,执行结果包括:
- 执行 DDL,删除指定的 like 列
- 修改加密规则
- 支持 MySQL 和 Oracle 类型的存储单元
参数说明
| 名称 | 数据类型 | 说明 |
|---|---|---|
| tableName | IDENTIFIER | 表名 |
| columnName | IDENTIFIER | 逻辑列名 |
| skipDDL | BOOLEAN | 是否跳过 DDL 执行 |
示例
CONVERT TABLE t_encrypt DROP LIKE COLUMNS(password);
6. 为加密表添加排序查询列 #
语法
showDDLForConvertTableAddOrder
: SHOW DDL FOR CONVERT TABLE tableName ADD ORDER addOrderColumnsDefinition (',' dataTypePriorityDefinition)?
;
convertTableAddOrder
: CONVERT TABLE tableName ADD ORDER addOrderColumnsDefinition (',' skipDDL)?
;
addOrderColumnsDefinition
: '(' COLUMNS '(' orderColumnDefinition (',' orderColumnDefinition)* ')' startEncryptingJob? ')'
;
orderColumnDefinition
: '(' NAME '=' columnName ',' orderQueryColumnDefinition ',' orderQueryAlgorithm ')'
;
orderQueryColumnDefinition
: (ORDER_QUERY | ORDER_QUERY_COLUMN) '=' orderQueryColumnName (',' ORDER_QUERY_DATA_TYPE '=' dataType)?
;
orderQueryAlgorithm
: ORDER_QUERY_ALGORITHM '(' algorithmDefinition ')'
;
- 用于为已有加密表添加排序查询列,执行结果包括:
- 执行 DDL,创建加密规则需要的 order 列
- 修改加密规则
- 若 startEncryptingJob 为 true,自动触发洗数任务(仅洗 order 列)
参数说明
| 名称 | 数据类型 | 说明 |
|---|---|---|
| tableName | IDENTIFIER | 表名 |
| columnName | IDENTIFIER | 逻辑列名 |
| orderQueryColumnName | IDENTIFIER | order 列名 |
| dataType | STRING | 数据类型 |
| booleanLiterals | BOOLEAN | 布尔值 |
| skipDDL | BOOLEAN | 是否跳过 DDL 执行 |
| dataTypePriorityDefinition | TEXT | 查看 DDL 时的数据类型优先级,默认 CALCULATED |
示例
CONVERT TABLE t_encrypt ADD ORDER (
COLUMNS(
(NAME=password,
ORDER_QUERY=password_order,
ORDER_QUERY_DATA_TYPE='varchar(200)',
ORDER_QUERY_ALGORITHM(TYPE(NAME='SphereEx:FASTOPE',PROPERTIES('factor-e-key'='0.430776091325847','factor-e-value'='0.529413569729168','factor-d-key'='0.156802046565771','factor-d-value'='0.355246381246054')))
)
), START_ENCRYPTING_JOB=TRUE
);
7. 为加密表移除排序查询列 #
语法
showDDLForConvertTableDropOrder
: SHOW DDL FOR CONVERT TABLE tableName DROP ORDER dropColumnsDefinition
;
convertTableDropOrder
: CONVERT TABLE tableName DROP ORDER dropColumnsDefinition (',' skipDDL)?
;
dropColumnsDefinition
: COLUMNS '(' columnName (',' columnName)* ')'
;
- 用于为已有加密表移除 order 列,执行结果包括:
- 执行 DDL,删除指定的 order 列
- 修改加密规则
参数说明
| 名称 | 数据类型 | 说明 |
|---|---|---|
| tableName | IDENTIFIER | 表名 |
| columnName | IDENTIFIER | 逻辑列名 |
| skipDDL | BOOLEAN | 是否跳过 DDL 执行 |
示例
CONVERT TABLE t_encrypt DROP ORDER COLUMNS(password);
8. 切换明文查询开关 #
语法
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;
9. 将加密表转换为非加密表 #
语法
convertTableDropEncryptRule
: CONVERT TABLE tableName DROP ENCRYPT RULE (',' skipDDL)?
;
- 用于将加密表转换为非加密表,执行结果包括:
- 执行 DDL,删除为加密规则创建的衍生列
- 删除加密规则
- 支持 MySQL 和 Oracle 类型的存储单元
参数说明
| 名称 | 数据类型 | 说明 |
|---|---|---|
| tableName | IDENTIFIER | 表名 |
| skipDDL | BOOLEAN | 是否跳过 DDL 执行 |
示例
CONVERT TABLE t_single DROP ENCRYPT RULE;