在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
具体命令如下:
1 | load data infile '文件路径' |
建议把密钥进行Hash会更安全:
1 | load data infile '文件路径' |
解密查询:
1 | select AES_DECRYPT('字段1', UNHEX(SHA2('密钥',512))), |
如果你是使用工具,一般上面的方式就能看到人类能读懂的数据,但如果你使用的是命令行工具,那可能需要做一下转化:
1 | select CAST(AES_DECRYPT('字段1', UNHEX(SHA2('密钥',512))) AS CHAR(50)), |
注意:
1.AES加密数据不能使用varchar
类型存储,会报[HY000][1366] Incorrect string value: '\x89P\xD76\xC6$...' for column
的错误,可以换成varbinary
类型。
2.如果表内本身存在数据也需要加密,那可以把字段类型先更换为varbinary
,再使用update
命令对数据进行加密更新