简介
mysql加密通常分两种. 数据库层面加密 和 业务层面加密. 通常建议业务层面实现加密
数据库层加密
数据库层面加密 又分为使用函数加密指定数据 和 使用加密插件加密整个数据
加密函数
使用加密函数对写入的数据进行加密, 使用解密对读取的数据进行解密操作
比如可以使用AES_ENCRYPT对数据进行加密, AES_DECRYPT对数据进行解密
优点: 只加密指定数据, 效率高
缺点: 使用麻烦
使用加密插件
参考官网: https://dev.mysql.com/doc/refman/5.7/en/keyring.html
安装插件: (参考:https://dev.mysql.com/doc/refman/5.7/en/keyring-plugin-installation.html)
编辑mysql配置文件my.cnf添加
early-plugin-load=keyring_file.so
keyring_file_data=/usr/local/mysql/keyring/keyring
然后重启mysqld (注意/usr/local/mysql/keyring目录权限)
查看插件
创建带有加密属性的表
create table t20231211_2(id int primary key, name varchar(20), age int) ENCRYPTION=‘Y’;
设置已有表使用加密
alter table t20231211_2 ENCRYPTION=‘Y’;
取消已有表的加密
alter table t20231211_2 ENCRYPTION=‘N’;
优点: 操作简单
缺点: 密钥丢了数据就无法恢复. 备份时需要注意
应用层加密
应用层加密分为 使用现有库加密数据 和自定义加密规则 加密数据
不同的语言有不同的加密库, 也有丰富的第三方库实现加密. 比如Python的cryptography
例子
优点: 使用简单
缺点: 现有库 可能存在漏洞
自定义加密规则
现有加密库可能无法满足业务需求. 此时就可以自定义加密规则了. 比如: https://cloud.tencent.com/developer/article/2256534 相同字符串每次加密结果不同, 但均能正确解密
例子:
优点: 自定义规则几乎很难被破解.
缺点: 加密规则设计成本高.