MySQL原生加密(TDE)官方流程

一、权限要求

安装加密插件只需要用户具有 INSERT 权限即可,不需要为 root 用户

卸载加密插件只需要用户具有 DELETE 权限即可

加解密数据表需要用户在安装加密插件之后具有 ALERT 权限即可

二、加载密钥插件

MySQL 自 5.7 版本之后 都提供了一个插件,用于加解密MySQL 的表空间文件。但是这个插件默认是不开启的状态。如果需要使用到 MySQL 的原生加密(TDE),则需要手动开启这个插件。

MySQL 提供的密钥插件在 8.0.34 版本之后发生了变化

在 5.7 到 8.0.34 版本之间,使用的是 keyring_file 这个插件;在 8.0.34 版本之后,这个插件就被弃用了,改为了 keyring_encrypted_file 这个插件,下面是 8.0 官方文档的图示
在这里插入图片描述
MySQL 8.0.34 版本还可以继续沿用 keyring_file 插件的安装和使用方式,更高的版本因为没有环境,暂时没有办法验证

在MySQL 的最新版本中还存在 keyring_file 插件 ,官方文档中说将会在未来的某一个版本中删除,并没有确定具体是哪一个版本
在这里插入图片描述

2.1 在Linux操作系统下(MySQL版本为8.0.32/8.0.23/5.7.39-log已验证)

首先需要在MySQL的安装目录下找到 my.cnf 文件(Windows中为 my.ini 文件),添加下面两行配置

[mysqld]
early-plugin-load=keyring_file.so
keyring_file_data=<MySQL的插件路径>/keyring_file

可以使用下面的sql语句获取MySQL的插件路径

SHOW GLOBAL VARIABLES LIKE 'plugin_dir';

然后 keyring_file 插件使用下面的命令开启插件

INSTALL PLUGIN keyring_file SONAME 'keyring_file.so';

执行完上面的两个命令之后需要重启 MySQL 服务,让数据库正常加载加密插件。(实际测试中不重启也能正常加载加密插件)

重启之后可以使用下面的命令查看加密插件是否正常运行

SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE 'keyring%';

在这里插入图片描述
如上图限制 状态为 ACTIVE 则表示加密插件正常在运行

也可以使用 SHOW PLUGINS 这个SQL 命令查看所有的 plugins ,找到新添加的 keyring_file。
在这里插入图片描述在使用插件创建了主加密密钥之后,需要立即备份该主加密密钥,在主密钥轮换之后也需要再次进行备份。

2.2 在Windows操作系统下(MySQL版本为8.0.34已验证)

只需要将加密插件的后缀改为 .dll 即可,其他操作均与Linux相同

INSTALL PLUGIN keyring_file SONAME 'keyring_file.dll';

三、卸载加密插件

MySQL版本为8.0.32/8.0.34/8.0.23/5.7.39-log已验证

执行下面的SQL语句之后,加密插件将被卸载

其中的 keyring_file 为加载加密插件时使用的名称

UNINSTALL PLUGIN keyring_file;

在这里插入图片描述

四、查询主密钥文件的位置

show variables like 'keyring_file_data'

在这里插入图片描述
这个 keyring 就是主密钥文件

五、加解密表

5.1 在创建表的时候设置加密

CREATE TABLE t1 (c1 INT) ENCRYPTION='Y';

5.2 给已存在的表设置加密

ALTER TABLE t1 ENCRYPTION='Y';

会将这张表中原有的数据都加密
在这里插入图片描述
因为在一张拥有90w条数据(2个字段)的表上设置这个参数,需要耗时3s

5.3 禁用已存在的表的加密

ALTER TABLE t1 ENCRYPTION='N';

会将这张表原有被加密的数据都解密
在这里插入图片描述
因为在一张拥有90w条数据(2个字段)的表上设置这个参数,需要耗时4s

5.4 给表设置加密之后表空间文件的变化

在这里插入图片描述

5.5 给表设置禁用加密之后表空间文件的变化

在这里插入图片描述

5.6 加解密过程中是否能进行其他sql操作

相同连接正在加密的连接不能进行其他操作,当本连接在加解密的过程中执行其他sql,这条sql会等到加解密完成之后再执行。

其他连接可以进行正常的查询操作,增删改操作需要等待加解密完成之后才能进行操作。

六、主密钥轮换

为了确保数据库的安全性,MySQL 的原生加密的主密钥应该定期轮换,或者是当怀疑密钥泄露的时候,也应该立刻轮换主密钥。

如果服务器在主密钥轮换的时候发生了故障,主密钥轮换将会回滚操作,确保数据的一致性。

轮换主加密密钥只会更改主加密密钥并重新加密 表空间密钥。它没有解密或重新加密关联的表空间数据。

原文如下(不确定理解的是否正确)
在这里插入图片描述

执行下面的轮换主密钥命令需要 SUPER 权限

ALTER INSTANCE ROTATE INNODB MASTER KEY;

七、加密的限制

(1)仅用户创建的表支持加密,其他MySQL自带的表空间不支持加密

(2)加密仅适用于表空间中的数据

(3)创建的索引表不支持加密

详细请看下方的原文:
在这里插入图片描述

八、MySQL的原生加密插件版本支持情况

根据官方文档的说明,keyring_file 插件的支持情况如下:

● MySQL 5.7.12 和之后的版本:该插件是默认安装的,并提供了 keyring_file 插件的功能。

● MySQL 5.6.x:虽然不是默认安装的,但可以手动安装 keyring_file 插件。(网上说的,官方文档没有说明)
实际验证之后,在 MySQL 5.6.30 版本的数据库上,无法执行

INSTALL PLUGIN keyring_file SONAME 'keyring_file.so';

上面的语句进行原生加密的插件安装,需要手动在服务器上安装并配置

● MySQL 5.5.x 及更早版本:keyring_file 插件不可用,因为它们不支持插件机制。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLTDE(Transparent Data Encryption)是一种数据库加密技术,可以将数据库文件加密以保护数据的安全性。实现MySQLTDE可以使用第三方加密软件或硬件进行加密,也可以使用MySQL自带的加密插件。 以下是使用MySQL自带的加密插件实现TDE的步骤: 1. 安装MySQL插件 MySQL自带了一个加密插件,名为mysql_aes_cbc。可以通过以下命令安装: ``` INSTALL PLUGIN mysql_aes_cbc SONAME 'mysql_aes_cbc.so'; ``` 2. 创建加密表空间 为了加密整个数据库,需要创建一个加密表空间,并将所有表和索引移到该表空间中。可以使用以下命令创建加密表空间: ``` CREATE TABLESPACE `encrypted_tablespace` ADD DATAFILE 'encrypted_tablespace.ibd' ENGINE=INNODB ENCRYPTION='Y'; ``` 其中,encrypted_tablespace是加密表空间的名称,encrypted_tablespace.ibd是加密表空间的数据文件名。 3. 将表和索引移到加密表空间 使用以下命令将表和索引移到加密表空间: ``` ALTER TABLE `table_name` TABLESPACE `encrypted_tablespace`; ALTER INDEX `index_name` ON `table_name` TABLESPACE `encrypted_tablespace`; ``` 其中,table_name是表的名称,index_name是索引的名称。 4. 加密数据文件 使用以下命令对数据文件进行加密: ``` ALTER TABLE `table_name` ENCRYPTION='Y'; ``` 其中,table_name是表的名称。 5. 验证加密 使用以下命令验证是否成功加密: ``` SHOW CREATE TABLE `table_name`; ``` 其中,table_name是表的名称。如果输出结果中包含“ENCRYPTION='Y'”,则表示加密成功。 注意:MySQLTDE只能保护数据在磁盘上的安全,不会加密在内存中的数据。因此,如果服务器被攻击并且MySQL进程已经启动,攻击者可以通过内存中的数据访问到未加密的数据。因此,建议同时使用其他安全措施来保护MySQL服务器的安全

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值