• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL InnoDB表空间加密示例详解

mysql 搞代码 4年前 (2022-01-09) 26次浏览 已收录 0个评论

前言

从 MySQL5.7.11开始,MySQL对InnoDB支持存储在单独表空间中的表的数据加密 。此功能为物理表空间数据文件提供静态加密。该加密是在引擎内部数据页级别的加密手段,在数据页写入文件系统时加密,加密用的是AES算法,而其解密是在从文件读到内存中时进行。

1 配置加密插件

1.1 修改配置文件

在mysql配置文件【mysqld】x项中添加如下内容

plugin_dir=/usr/local/mysql5.7/lib/mysql/plugin   # 插件路径,根据实际情况修改
early-plugin-load="keyring_file.so"      # 加密插件
keyring_file_data=/data/mysql3306/keyring/keyring  # 路径不存在,需要创建
innodb_file_per_table=1                # 只作用于独立表空间

1.2 创建加密所需的路径并配置权限

创建时要注意 ,keyring_file_data 里配置的keyring会在启动时自动创建,本步骤中创建到对应目录即可

mkdir -p /data/mysql3306/keyring/
chown -R mysql:mysql /data/mysql3306/keyring/
chmod 750 /data/mysql3306/keyring

1.3 重启MySQL

重启mysql即可,启动后会发现注意/data/mysql3306/keyring 目录下生成了 keyring文件

注意,重启后也要看一下mysql错误日志里有没有相关错误信息,如果没有错误则继续进行

1.4 查看插件状态

启动后可以查看插件是否生效

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_Type,PLUGIN_Library FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring_file';
+--------------+---------------+-------------+-----------------+
| PLUGIN_NAME | PLUGIN_STATUS | PLUGIN_Type | PLUGIN_Library |
+--------------+---------------+-------------+-----------------+
| keyring_file | ACTIVE  | KEYRING  | keyring_file.so |
+--------------+---------------+-------------+-----------------+
1 row in set (0.01 sec)

或者用 show plugins命令查看

2 测试加密表空间

2.1 创建加密的新表

创建一张新表,并添加ENCRYPTION=’Y’ ,加密表空间

mysql> create table test1(
id int primary key auto_increment, 
name varchar(20),
key name(name))
 ENCRYPTION='Y';
Query OK, 0 rows affected (0.02 sec)

此时,keyring文件也会有变化

2.2 新增数据

向新增的测试表里添加测试数据,并查看

mysql> insert into test1(id,name) values(1,'anm'),(2,'keyring');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from test1;
+----+---------+
| id | name |
+----+---------+
| 1 | anm  |
| 2 | keyring |
+----+---------+
2 rows in set (0.00 sec)

2.3修改是否加密

测试取消表空间加密

mysql> show create table test1;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                   |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test1 | CREATE TABLE `test1` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(20) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 ENCRYPTION='Y' |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> alter table test1 ENCRYPTION='N';
Query OK, 2 rows affected (0.04 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> show create table test1;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                   |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test1 | CREATE TABLE `test1` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(20) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 ENCRYPTION='N' |
+-------+----------------------------------------------------------------------------<strong style="color:transparent">本文来源gaodai#ma#com搞@@代~&码*网/</strong>-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from test1;
+----+---------+
| id | name |
+----+---------+
| 1 | anm  |
| 2 | keyring |
+----+---------+
2 rows in set (0.00 sec)

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL InnoDB表空间加密示例详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址