Logo
加密表转换

语法清单 #

语法描述类型
CONVERT TABLE tableName BY ENCRYPT RULE将非加密表转换为加密表RDL
CONVERT TABLE tableName ADD PLAIN为加密表添加明文列RDL
CONVERT TABLE tableName DROP PLAIN为加密表移除明文列RDL
CONVERT TABLE tableName ADD LIKE为加密表添加模糊查询列RDL
CONVERT TABLE tableName DROP LIKE为加密表移除模糊查询列RDL
ALTER ENCRYPT RULE tableName SET QUERY_WITH_PLAIN切换明文查询开关RDL
CONVERT TABLE tableName DROP ENCRYPT RULE将加密表转换为非加密表RDL

1. 将非加密表转换为加密表 #

语法

convertEncryptTable
    : CONVERT TABLE tableName BY ENCRYPT RULE encryptTableRuleDefinition startEncryptingJob?
    ;

startEncryptingJob
    : ',' START_ENCRYPTING_JOB '=' booleanLiterals
    ;

booleanLiterals
    : true | false
    ;
  • 用于将普通单表转换为加密表,执行结果包括:
    • 执行 DDL,创建加密规则需要的衍生列
    • 创建加密规则
    • 若 startEncryptingJob 为 true,自动触发洗数任务
  • 支持 MySQL、Oracle 和 Hive 类型的存储单元

参数说明

名称数据类型说明
tableNameIDENTIFIER表名
encryptTableRuleDefinitionTEXT加密规则定义,与 CREATE ENCRYPT RULE 中的格式一致
booleanLiteralsBOOLEAN布尔值

示例

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);

2. 为加密表添加明文列 #

语法

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 类型的存储单元

参数说明

名称数据类型说明
tableNameIDENTIFIER表名
columnNameIDENTIFIER逻辑列名
booleanLiteralsBOOLEAN布尔值

示例

CONVERT TABLE t_encrypt ADD PLAIN COLUMNS(password), START_DECRYPTING_JOB=TRUE;

3. 为加密表移除明文列 #

语法

convertTableDropPlain
    : CONVERT TABLE tableName DROP PLAIN dropColumnsDefinition
    ;

dropColumnsDefinition
    : COLUMNS '(' columnName (',' columnName)* ')'
    ;
  • 用于为已有加密表移除明文列,执行结果包括:
    • 执行 DDL,删除指定的明文列
    • 修改加密规则
  • 支持 MySQL 和 Oracle 类型的存储单元

参数说明

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

示例

CONVERT TABLE t_encrypt DROP PLAIN COLUMNS(password);

4. 为加密表添加模糊查询列 #

语法

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 类型的存储单元

参数说明

名称数据类型说明
tableNameIDENTIFIER表名
columnNameIDENTIFIER逻辑列名
likeQueryColumnNameIDENTIFIERlike 列名
dataTypeSTRING数据类型
booleanLiteralsBOOLEAN布尔值

示例

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. 为加密表移除模糊查询列 #

语法

convertTableDropLike
    : CONVERT TABLE tableName DROP LIKE dropColumnsDefinition
    ;

dropColumnsDefinition
    : COLUMNS '(' columnName (',' columnName)* ')'
    ;
  • 用于为已有加密表移除 like 列,执行结果包括:
    • 执行 DDL,删除指定的 like 列
    • 修改加密规则
  • 支持 MySQL 和 Oracle 类型的存储单元

参数说明

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

示例

CONVERT TABLE t_encrypt DROP LIKE COLUMNS(password);

6. 切换明文查询开关 #

语法

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;

7. 将加密表转换为非加密表 #

语法

convertTableDropEncryptRule
    : CONVERT TABLE tableName DROP ENCRYPT RULE
    ;
  • 用于将加密表转换为非加密表,执行结果包括:
    • 执行 DDL,删除为加密规则创建的衍生列
    • 删除加密规则
  • 支持 MySQL 和 Oracle 类型的存储单元

参数说明

名称数据类型说明
tableNameIDENTIFIER表名

示例

CONVERT TABLE t_single DROP ENCRYPT RULE;