mysql表空间加密

ERROR 3185 (HY000): Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully.

看到这个报错,感觉很陌生,查了下资料是表空间加密文件被删除了,顺便了解下表空间加密。

MySQL5.7开始支持表空间加密了,这个特性默认是没有启用的,要使用这个功能要安装插件keyring_file。

 

1.创建密钥文件目录

mkdir -p /opt/mysql/3306/mysql-keyring/

chown -R mysql.mysql /opt/mysql/3306/mysql-keyring/

chmod 750  /opt/mysql/3306/mysql-keyring/

2.修改配置文件

early-plugin-load=keyring_file.so

keyring_file_data= /opt/mysql/3306/mysql-keyring/keyring

重启数据库

service mysqld restart

3.安装插件

 

nnoDB表空间加密依赖于keyring插件。总共有四个插件

keyring插件 开始版本 类型
keyring_file  5.7.11 社区版
keyring_encrypted_file  5.7.21 企业版
keyring_okv  5.7.12 企业版
keyring_aws  5.7.19 企业版

由于上面四种类型的加密后三种都只有在企业版本有,所以这里安装社区版本的keyring_file为例进行说明。

查看所加插件是否生效:

 

4.创建加密表空间
CREATE TABLE t1 (c1 INT) ENCRYPTION='Y';
ALTER TABLE t1 ENCRYPTION='Y';

另外如果取消加密表空间:
ALTER TABLE t1 ENCRYPTION='N';

插入数据:

把加密文件删除:

 

在去数据库查看表:

遇到这种表空间加密文件被误删的情况只能利用备份恢复数据了。

 

补充:

mysql表空间加密,它使用两层加密架构。

包括:master key 和 tablespace key

master key用于加密tablespace key,加密后的结果存储在tablespace的header中。tablespace key用于加密数据

当用户想访问加密的表时,innoDB会先用master key对之前存储在header中的加密信息进行解密,得到tablespace key。再用tablespace key解密数据信息。tablespace key是不会被改变的(除非进行alter table t1 encrytion=NO, alter table t1 encrytion=YES)。而master key可以随时改变(ALTER INSTANCE ROTATE INNODB MASTER KEY;)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值