Logo
数据加解密

数据加解密 #

语法描述类型
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  

参数说明

参数解释 #

名称数据类型说明
tableNameIDENTIFIER表名称
columnNameIDENTIFIER逻辑列名称
DATA_TYPEIDENTIFIER逻辑列数据类型
PLAINIDENTIFIER明文列名称
CIPHERIDENTIFIER加密列名称
CIPHER_DATA_TYPEIDENTIFIER加密列数据类型
ASSISTED_QUERY_COLUMNIDENTIFIER辅助查询列 1.5.0 前参数,已做兼容,目前可用
ASSISTED_QUERYIDENTIFIER辅助查询列 1.5.0 后参数,推荐使用
ASSISTED_QUERY_DATA_TYPEIDENTIFIER辅助查询列数据类型
LIKE_QUERY_COLUMNIDENTIFIER模糊查询列 1.5.0 前参数,已做兼容,目前可用
LIKE_QUERYIDENTIFIER模糊查询列 1.5.0 后参数,推荐使用
LIKE_QUERY_DATA_TYPEIDENTIFIER模糊查询列数据类型
ENCRYPT_ALGORITHMSTRING加密算法名称
ASSISTED_QUERY_ALGORITHMSTRING辅助查询算法
LIKE_QUERY_ALGORITHMSTRING模糊查询算法
  • 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

参数说明

名称数据类型说明
tableNameIDENTIFIER表名称
columnNameIDENTIFIER逻辑列名称
DATA_TYPEIDENTIFIER逻辑列数据类型
PLAINIDENTIFIER明文列名称
CIPHERIDENTIFIER加密列名称
CIPHER_DATA_TYPEIDENTIFIER加密列数据类型
ASSISTED_QUERY_COLUMNIDENTIFIER辅助查询列 1.5.0 前参数,已做兼容,目前可用,等同于 ASSISTED_QUERY
ASSISTED_QUERYIDENTIFIER辅助查询列 1.5.0 后参数,推荐使用,等同于 ASSISTED_QUERY_COLUMN
ASSISTED_QUERY_DATA_TYPEIDENTIFIER辅助查询列数据类型
LIKE_QUERY_COLUMNIDENTIFIER模糊查询列 1.5.0 前参数,已做兼容,目前可用,等同于 LIKE_QUERY
LIKE_QUERYIDENTIFIER模糊查询列 1.5.0 后参数,推荐使用,等同于 LIKE_QUERY_COLUMN
LIKE_QUERY_DATA_TYPEIDENTIFIER模糊查询列数据类型
ENCRYPT_ALGORITHMSTRING加密算法名称
ASSISTED_QUERY_ALGORITHMSTRING辅助查询算法
LIKE_QUERY_ALGORITHMSTRING模糊查询算法
  • 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

参数说明

名称数据类型说明
keyManagerNameSTRING密钥管理器名称

示例

本地密钥管理

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

参数说明

名称数据类型说明
keyManagerNameSTRING密钥管理器名称
示例

本地密钥管理

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;

参数说明

名称数据类型说明
keyManagerNameSTRING密钥管理器名称

示例

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

参数说明

名称数据类型说明
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);

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

参数说明

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

示例

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

参数说明

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

示例

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

参数说明

名称数据类型说明
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
);

13. 为加密表移除模糊查询列 #

语法

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

14. 切换明文查询开关 #

语法

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;

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

语法

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

参数说明

名称数据类型说明
tableNameIDENTIFIER表名

示例

CONVERT TABLE t_single DROP ENCRYPT RULE;