MySQL 整表加密解决方案 keyring_file详解
作者:coderstory 发布时间:2024-01-18 07:50:31
说明
MySql社区版从5.7.11开始支持基于表的数据加密方案,模块名为keyring_file,支持加密整张表。这种是加密方式其实是基于文件加密的,一旦mysqld读取key启动后,将会解密整张表的数据,在mysql服务内,读取的数据都是解密后的,也就是说对客户端而言是无感知的。而这个key是本地存放的,mysql服务拥有读写这个key的权限。
总体看这种方案不太安全,原因是数据库文件是加密的,但只要能有mysql服务的账户,那么访问数据都是解密后的,加密不攻自破。而且解密key也是本地存放的,入侵者完全可以一并带走。这种方案只能保证入侵者只拖走了数据库文件后无法读取内容。
企业版MySQL额外的三种模块
如果是企业版的mysql,那么还有另外三种加密方案。
1.keyring_encrypted_file
和我之前说的社区版差不多的,只是多了一个key。这个key用于加密解密数据库用的key。安全性方面都差不多。
2.keyring_okv
相比本地存放key,本模块使用KMIP存取key,相对更加安全。
3.keyring_aws
整合aws的密匙管理服务来管理加解密的key。进一步提高key的管理安全性。
四个加密模块支持的加密类型
模块名 | 可用加密算法 | 密钥长度限制 |
---|---|---|
keyring_encrypted_file | AES DSA RSA | 无限制 无限制 无限制 |
keyring_file | AES DSA RSA | 无限制 无限制 无限制 |
keyring_okv | AES | 16, 24, 32 |
keyring_aws | AES | 16, 24, 32 |
总结一下,四种方案都是文件加密,内存解密方案,区别在于加解密的key存放方案。推荐使用keyring_okv和keyring_aws,并确保mysql账户的安全性和严格区分账户权限。
另外2种安全性不大。
实施步骤
OK,现在简单讲一下最简单的keyring_file部署方案,提前说明下windows貌似无法使用这种方案,因为不知道为什么加密用的key总是无法生成。
1.使用最新版的mysql 5.7.21
使用yum apt 之类的工具安装最新版的mysql 或者 下载源码自行编译安装
sudo apt install mysql-5.7
2.启用加密模块
INSTALL PLUGIN keyring_file soname ‘keyring_file.so';
mysql> INSTALL PLUGIN keyring_file soname 'keyring_file.so';
Query OK, 0 rows affected (0.10 sec)
3.设置加密key存放路径
set global keyring_file_data='/root/mysql-keyring/keyring';
mysql> set global keyring_file_data='/var/lib/mysql-keyring/keyring';
Query OK, 0 rows affected (0.00 sec)
4.永久启用设置
上诉两个步骤都是临时的,重启服务都会失效,我们把配置写到配置文件里,确保重启服务后也能生效
[mysqld]
early-plugin-load=keyring_file.so
keyring_file_data=/root/mysql-keyring/keyring
5.查看key的存放路径
show global variables like ‘%keyring_file_data%';
mysql> show global variables like '%keyring_file_data%';
+-------------------+--------------------------------+
| Variable_name | Value |
+-------------------+--------------------------------+
| keyring_file_data | /var/lib/mysql-keyring/keyring |
+-------------------+--------------------------------+
1 row in set (0.00 sec)
6.查看启用的模块
查看下keyring_file模块是否已经被载入。
show plugins;
mysql> show plugins;
+----------------------------+----------+--------------------+-----------------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+-----------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
。。。。。。(省略N条)
| keyring_file | ACTIVE | KEYRING | keyring_file.so | GPL |
+----------------------------+----------+--------------------+-----------------+---------+
45 rows in set (0.00 sec)
7.加密现有的表
alter table table encryption='Y';
mysql> create table cc (id int);
Query OK, 0 rows affected (0.01 sec)
mysql> alter table cc encryption='Y';
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
8.取消加密
alter table table encryption='N';
mysql> alter table cc encryption='N';
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
官方文档:
https://dev.mysql.com/doc/refman/5.7/en/keyring-installation.html
来源:https://blog.coderstory.cn/mysql-keyring_file/


猜你喜欢
- 在实际工作中,有些场景下,因为产品既有功能限制,不支持特大文件的直接处理,需要把大文件进行切割处理。当然可以通过UltraEdit编辑工具,
- 本文实例讲述了Python运算符重载用法。分享给大家供大家参考。具体分析如下:python中,我们在定义类的时候,可以通过实现一些函数来实现
- 由于微博的网页端有反爬虫,需要登录,所以我们换个思路,曲线救国。我们找到微博在浏览器上面用于手机端的调试的APL,如何找到呢?我这边直接附上
- 实例如下所示://二维数组去掉重复值 public function a_array_unique($array){ $out
- UUID(Universally Unique Identifier)是通用唯一识别码,在许多领域用作标识,比如我们常用的数据库也可以用它来
- 1 拷贝下面的代码到一个文件,并命名为forkcore.pyimport osimport threadingimport selectim
- 函数:原型每一个构造函数都有一个属性叫做原型(prototype,下面都不再翻译,使用其原文)。这个属性非常有用:为一个特定类声明通用的变量
- 随机排列利用 numpy.random.permutation() 函数,可以返回一个序列的随机排列。将此随机排列作为 take() 函数的
- Mutex的4种易错使用场景1.Lock/Unlock 不成对出现Lock/Unlock 没有成对出现,就可能会出现死锁或者是因为Unloc
- 概述for循环是一个循环控制结构,可以执行指定次数的循环语法第一种for {} //无线循环第二种for 条件语
- 前两天,编辑建议我去当当和卓越申请个用户,在网站上放上我的书的链接,这样还可以拿到一些反点儿,于是我兴冲冲地跑到几个网站上去看,却只在卓越(
- 方法一: 1、打开查询分析器,输入命令 BACKUP LOG database_name WITH NO_LOG 2、再打开企业管理器--右
- asp程序出错后,错误提示不是很清楚明白,让人摸不着头脑,用下面方法看看有没有帮助(此法目前只适合除ADO错误外的错误) &nb
- 有时需要根据项目的实际需求向spider传递参数以控制spider的行为,比如说,根据用户提交的url来控制spider爬取的网站。在这种情
- 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。以下文章来源于早起Python ,作者投
- scipy.optimize.curve_fit解读相比numpy库的多项式拟合函数polyfit,scipy.optimize模块中的函数
- 前言本人在学习go-micro中,用到Makefile,本人之前用过Makefile,但是不知道为什么这会就不能用了,我找了好多教程都没能解
- 设计师不等于美工设计无所不在,但大多数企业不知道如何使用它。现代设计进入中国大概是二十多年的时间,而在国外,尤其在美国在欧洲,大概有一百年的
- 对于要搜索的元素越多,二分查找速度比简单查找快的更多 这是二分查找算法的优点,但二分算法也有缺点,二分算法只针对有序的列表,这样插入和删除就
- 1,使用save会在package.json中自动添加。npm install node-sass --save-devnpm instal