说明

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

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)

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)

上诉两个步骤都是临时的,重启服务都会失效,我们把配置写到配置文件里,确保重启服务后也能生效

[mysqld]early-plugin-load=keyring_file.sokeyring_file_data=/root/mysql-keyring/keyring

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)

查看下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)

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

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

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. Android(安卓)- Manifest 文件 详解
  3. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  4. [RK3399][Android7.1.1] WifiAp:开机默认打开wifi热点
  5. Android(安卓)Studio bug - attribute 'android:versionCode' no
  6. Selector、shape详解(一)
  7. Android获取设备唯一标识完美解决方案
  8. android2.2资源文件详解4--menu文件夹下的菜单定义
  9. Android发送短信方法实例详解

随机推荐

  1. Qt通过ODBC连接SQL Server2008实践总结
  2. Oracle SQL Developer是一个与c#一起使用
  3. mysql中insert...select引发的死锁
  4. SQL对多个列分别进行合并的操作,100分送
  5. [置顶] SQL Server 日期相关
  6. 2017年末大数据Linux,Oracle,MySQL,J2EE(
  7. [置顶] mysql七表查询实例(二)
  8. VFP+SQL Server 2000怎样进行数据库备份
  9. TSQL左连接多个右手行
  10. 每条sql语句实际上都是一个事物(事物多种