Logo
加密表转换

语法清单 #

语法描述类型
CONVERT TABLE tableName BY ENCRYPT RULE将非加密表转换为加密表RDL
SHOW DDL FOR CONVERT TABLE tableName BY ENCRYPT RULE查看将非加密表转换为加密表所需的 DDLRQL
CONVERT TABLE tableName ADD PLAIN为加密表添加明文列RDL
SHOW DDL FOR CONVERT TABLE tableName ADD PLAIN查看添加明文列所需的 DDLRQL
CONVERT TABLE tableName DROP PLAIN为加密表移除明文列RDL
SHOW DDL FOR CONVERT TABLE tableName DROP PLAIN查看移除明文列所需的 DDLRQL
CONVERT TABLE tableName ADD LIKE为加密表添加模糊查询列RDL
SHOW DDL FOR CONVERT TABLE tableName ADD LIKE查看添加模糊查询列所需的 DDLRQL
CONVERT TABLE tableName DROP LIKE为加密表移除模糊查询列RDL
SHOW DDL FOR CONVERT TABLE tableName DROP LIKE查看移除模糊查询列所需的 DDLRQL
CONVERT TABLE tableName ADD ORDER为加密表添加排序查询列RDL
SHOW DDL FOR CONVERT TABLE tableName ADD ORDER查看添加排序查询列所需的 DDLRQL
CONVERT TABLE tableName DROP ORDER为加密表移除排序查询列RDL
SHOW DDL FOR CONVERT TABLE tableName DROP ORDER查看移除排序查询列所需的 DDLRQL
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 RULESHOW DDL FOR CONVERT TABLE ... ADD LIKESHOW 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 类型的存储单元

参数说明

名称数据类型说明
tableNameIDENTIFIER表名
encryptTableRuleDefinitionTEXT加密规则定义,与 CREATE ENCRYPT RULE 中的格式一致
booleanLiteralsBOOLEAN布尔值
skipDDLBOOLEAN是否跳过 DDL 执行
dataTypePriorityDefinitionTEXT查看 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 类型的存储单元

参数说明

名称数据类型说明
tableNameIDENTIFIER表名
columnNameIDENTIFIER逻辑列名
booleanLiteralsBOOLEAN布尔值
skipDDLBOOLEAN是否跳过 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 类型的存储单元

参数说明

名称数据类型说明
tableNameIDENTIFIER表名
columnNameIDENTIFIER逻辑列名
skipDDLBOOLEAN是否跳过 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 类型的存储单元

参数说明

名称数据类型说明
tableNameIDENTIFIER表名
columnNameIDENTIFIER逻辑列名
likeQueryColumnNameIDENTIFIERlike 列名
dataTypeSTRING数据类型
booleanLiteralsBOOLEAN布尔值
skipDDLBOOLEAN是否跳过 DDL 执行
dataTypePriorityDefinitionTEXT查看 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 类型的存储单元

参数说明

名称数据类型说明
tableNameIDENTIFIER表名
columnNameIDENTIFIER逻辑列名
skipDDLBOOLEAN是否跳过 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 列)

参数说明

名称数据类型说明
tableNameIDENTIFIER表名
columnNameIDENTIFIER逻辑列名
orderQueryColumnNameIDENTIFIERorder 列名
dataTypeSTRING数据类型
booleanLiteralsBOOLEAN布尔值
skipDDLBOOLEAN是否跳过 DDL 执行
dataTypePriorityDefinitionTEXT查看 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 列
    • 修改加密规则

参数说明

名称数据类型说明
tableNameIDENTIFIER表名
columnNameIDENTIFIER逻辑列名
skipDDLBOOLEAN是否跳过 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
    ;

参数说明

名称数据类型说明
tableNameIDENTIFIER表名
columnNameIDENTIFIER逻辑列名

示例

-- 整表切换
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 类型的存储单元

参数说明

名称数据类型说明
tableNameIDENTIFIER表名
skipDDLBOOLEAN是否跳过 DDL 执行

示例

CONVERT TABLE t_single DROP ENCRYPT RULE;