Windows 下的MySQL安装keyring_file插件

文章目录

 

前言

从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>