前言
从5.7.11开始,mysql开始支持物理表空间的加密,它使用两层加密架构。
包括:主密钥(master key) 和 表空间加密密钥(tablespace key)
主密钥用于加密加密密钥,加密后的加密密钥存储在表空间文件的header中。加密密钥用于加密数据
当用户想访问加密的表时,innoDB会先用 主密钥 对之前存储在表空间header中被加密的加密密钥进行解密,得到明文的加密密钥。
再用 加密密钥 解密数据信息。加密密钥是不会被改变的(除非进行alter table testt encrytion=NO/YES)。
而 主密钥 可以通过以下命令随时改变
查看变更前keyring文件
执行主密钥变更命令
mysql> ALTER INSTANCE ROTATE INNODB MASTER KEY;
Query OK, 0 rows affected (0.01 sec)
mysql>
再次查看变更后keyring文件
一、配置my.ini
如没有该文件,可在创建一个在MySQL安装目录或C:\下,文件添加如下内容,目录以实际为准,然后重启MySQL。
[mysqld]
。。。其他配置。。
early-plugin-load=keyring_file.dll
keyring_file_data='D:\mysql-8.0.22\mysql-8.0.22-winx64\keyring'
# 其中keyring文件MySQL会自动创建,无需手动创建
二、安装keyring插件
登录MySQL,然后执行以下语句安装
mysql> install plugin keyring_file soname 'keyring_file.dll';
Query OK, 0 rows affected (0.01 sec)
三、查看插件状态
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
-> FROM INFORMATION_SCHEMA.PLUGINS
-> WHERE PLUGIN_NAME LIKE 'keyring%';
+--------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+--------------+---------------+
| keyring_file | ACTIVE |
+--------------+---------------+
1 row in set (0.00 sec)
mysql>
四、加解密数据表
mysql> use testdb;
Database changed
mysql> alter table testt encryption='Y';
Query OK, 3 rows affected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS
-> FROM INFORMATION_SCHEMA.TABLES
-> WHERE CREATE_OPTIONS LIKE '%ENCRYPTION=''Y''%';
+--------------+------------+----------------+
| TABLE_SCHEMA | TABLE_NAME | CREATE_OPTIONS |
+--------------+------------+----------------+
| testdb | testt | ENCRYPTION='Y' |
+--------------+------------+----------------+
1 row in set (0.01 sec)
mysql>
mysql> alter table testt encryption='N';
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql>
五、卸载keyring插件
mysql> UNINSTALL PLUGIN keyring_file;
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
-> FROM INFORMATION_SCHEMA.PLUGINS
-> WHERE PLUGIN_NAME LIKE 'keyring%';
Empty set (0.00 sec)
mysql>