在Mysql中使用load data infile
命令可以快速大批量加载数据到表中
AES_ENCRYPT(value,key)
是mysql自带的AES加密命令
如何在使用load data infile
加载数据的同时对数据使用AES加密呢?
通过阅读mysql提供的文档可以得到答案:
MySQL :: MySQL 8.0 Reference Manual :: 13.2.9 LOAD DATA Statement
具体命令如下:
load data infile '文件路径'
into table '表名'
set '字段1' = AES_ENCRYPT('字段1', '密钥'),
'字段2' = AES_ENCRYPT('字段2', '密钥');
建议把密钥进行Hash会更安全:
load data infile '文件路径'
into table '表名'
set '字段1' = AES_ENCRYPT('字段1', UNHEX(SHA2('密钥',512))),
'字段2' = AES_ENCRYPT('字段2', UNHEX(SHA2('密钥',512)));
解密查询:
select AES_DECRYPT('字段1', UNHEX(SHA2('密钥',512))),
AES_DECRYPT('字段2', UNHEX(SHA2('密钥',512)))
from '表名';
如果你是使用工具,一般上面的方式就能看到人类能读懂的数据,但如果你使用的是命令行工具,那可能需要做一下转化:
select CAST(AES_DECRYPT('字段1', UNHEX(SHA2('密钥',512))) AS CHAR(50)),
CAST(AES_DECRYPT('字段2', UNHEX(SHA2('密钥',512))) AS CHAR(50))
from '表名';
注意:
1.AES加密数据不能使用varchar
类型存储,会报[HY000][1366] Incorrect string value: '\x89P\xD76\xC6$...' for column
的错误,可以换成varbinary
类型。
2.如果表内本身存在数据也需要加密,那可以把字段类型先更换为varbinary
,再使用update
命令对数据进行加密更新
网友评论