语法清单 #
| 语法 | 描述 | 类型 |
|---|---|---|
| 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 类型的存储单元
参数说明
| 名称 | 数据类型 | 说明 |
|---|---|---|
| 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);
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 类型的存储单元
参数说明
| 名称 | 数据类型 | 说明 |
|---|---|---|
| tableName | IDENTIFIER | 表名 |
| columnName | IDENTIFIER | 逻辑列名 |
| booleanLiterals | BOOLEAN | 布尔值 |
示例
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 类型的存储单元
参数说明
| 名称 | 数据类型 | 说明 |
|---|---|---|
| tableName | IDENTIFIER | 表名 |
| columnName | IDENTIFIER | 逻辑列名 |
示例
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 类型的存储单元
参数说明
| 名称 | 数据类型 | 说明 |
|---|---|---|
| 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
);
5. 为加密表移除模糊查询列 #
语法
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);
6. 切换明文查询开关 #
语法
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;
7. 将加密表转换为非加密表 #
语法
convertTableDropEncryptRule
: CONVERT TABLE tableName DROP ENCRYPT RULE
;
- 用于将加密表转换为非加密表,执行结果包括:
- 执行 DDL,删除为加密规则创建的衍生列
- 删除加密规则
- 支持 MySQL 和 Oracle 类型的存储单元
参数说明
| 名称 | 数据类型 | 说明 |
|---|---|---|
| tableName | IDENTIFIER | 表名 |
示例
CONVERT TABLE t_single DROP ENCRYPT RULE;