mysql表空间权限_MySQL InnoDB表空间加密示例详解

前言

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

f4e2990e148b8f0233f6a851e8ef18b9.png

注意,重启后也要看一下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命令查看

457f3ff4e64cccf7459519a1ec221866.png

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文件也会有变化

e690148fa00d4cdaf2f30bfa09aa2a05.png

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

+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

mysql> select * from test1;

+----+---------+

| id | name |

+----+---------+

| 1 | anm |

| 2 | keyring |

+----+---------+

2 rows in set (0.00 sec)

再配置为加密

mysql> alter table test1 ENCRYPTION='Y';

Query OK, 2 rows affected (0.03 sec)

Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from test1;

+----+---------+

| id | name |

+----+---------+

| 1 | anm |

| 2 | keyring |

+----+---------+

2 rows in set (0.00 sec)

所以,表空间加密方式是可以在线调整的,且对数据查询不影响。

另外,keyring_file_data也是可以动态调整的,比较简单,就不演示了

2.4 统计表空间加密的表

想要知道哪些表的表空间加密了,可以通过数据字典表里查看

mysql> SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='testdb2' and CREATE_OPTIONS='ENCRYPTION="Y"';

+--------------+------------+----------------+

| TABLE_SCHEMA | TABLE_NAME | CREATE_OPTIONS |

+--------------+------------+----------------+

| testdb2 | test1 | ENCRYPTION="Y" |

+--------------+------------+----------------+

1 row in set (0.00 sec)

3. 异常处理

如果keyring文件损坏或被误删除了,会出现什么情况

3.1 备份keyring文件

为了保险起见,先备份一下keyring文件

[root@mha1 keyring]# cp -p keyring keyring.bak

[root@mha1 keyring]# ll -h

total 8.0K

-rw-r----- 1 mysql mysql 155 Aug 16 09:10 keyring

-rw-r----- 1 mysql mysql 155 Aug 16 09:10 keyring.bak

3.2 删除keyring

直接删除keyring文件

[root@mha1 keyring]# rm -f keyring

[root@mha1 keyring]# ll -h

total 4.0K

-rw-r----- 1 mysql mysql 155 Aug 16 09:10 keyring.bak

3.3 查看数据是否正常

查看数据及新建加密表是否成功

mysql> select * from test1;

+----+---------+

| id | name |

+----+---------+

| 1 | anm |

| 2 | keyring |

+----+---------+

2 rows in set (0.00 sec)

mysql> create table test2(id int primary key auto_increment, name varchar(20),key name(name)) ENCRYPTION='Y';

Query OK, 0 rows affected (0.01 sec)

也就是说此时,即使keyrig文件丢失也是可以正常操作的

3.4 重启数据库

重启数据库后,会发现,又自动生成了keyring文件

2eaf79fa32745acf81c3a01f87a9250a.png

此时再查看加密表

mysql> select * from test1;

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.

创建加密表

mysql> create table test3(id int primary key auto_increment, name varchar(20),key name(name)) ENCRYPTION='Y';

Query OK, 0 rows affected (0.02 sec)

新建表是可以的,因为此时相当于初始化的时候。

那么再将原keyring还原,然后再重启数据库,会发现又能成功了

mysql> select * from test1;

+----+---------+

| id | name |

+----+---------+

| 1 | anm |

| 2 | keyring |

+----+---------+

2 rows in set (0.00 sec)

4 keyring管理

4.1 定期备份

可以每日进行备份,但是备份的路径和日常备份分开,需要还原的时候再拷贝至目标文件

4.2 定期更新

为了考虑安全性,当怀疑key泄露时,需要进行更新。更新后原先的表依旧可以正常方案,因为更新置灰改变master encryption key 并重新加密 tablespace keys,不会对表空间重新加密或解密。更新的方法:

-- 更新 master key

mysql> ALTER INSTANCE ROTATE INNODB MASTER KEY;

Query OK, 0 rows affected (0.00 sec)

-- 更新后依旧能正常访问

mysql> select * from test1;

+----+---------+

| id | name |

+----+---------+

| 1 | anm |

| 2 | keyring |

+----+---------+

2 rows in set (0.00 sec)

至此,InnoDB表空间的简单使用就演示完毕。其中还有很多细节,可以查看官方文档进行探索,https://dev.mysql.com/doc/refman/5.7/en/innodb-data-encryption.html。

总结

到此这篇关于MySQL InnoDB表空间加密的文章就介绍到这了,更多相关MySQL InnoDB表空间加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dapr 正式发布 1.0

年前我写了一篇博客《Dapr 已在塔架就位 将发射新一代微服务》, 今天Dapr 正式发布了1.0 :Dapr Runtime v1.0.0Dapr dotnet SDK v1.0.0随着Dapr 发布1.0 版本, .NET团队编写的《Dapr for .NET Developers》:https://github.com/do…

帮助别人是一种快乐!

帮助人是一种快乐!忽然之间想起的这种话题。其实,还是缘于最近看的一篇商界人物的文章《杨卓舒》其实,这些字眼一直都在我们的眼帘前晃荡,更多的人只是顿悟而已,也许还有人帮助过一次,获得了一次短暂的快乐…

python中x 1什么意思_Python:A [1:]中x的含义是什么?

这是array slice语法.看到这个问题:Explain Python’s slice notation对于列表my_list对象,例如[1,2,“foo”,“bar”],my_list [1:]相当于从0索引1开始的所有元素的浅复制列表:[2,“foo”,“bar”].所以你的for语句遍历这些对象:…

100 万在中国不同地方能活多久?

最近,一张名为 “100 万在中国各省能生活多久?” 的图片在网上流传 话不多说,往下看 没错,就是正如你们看到的 天朝大北京 以“100万能活19年9个月”的 成绩排名“倒数第一” 图片一出 数据君虎口一震 顿时一声惊叫 统计按“年人均…

JAVA跟MYSQL数据库交互_【编写Java程序实现与Mysql数据库的连接,并交互性的实现简单查询,删除,修改,排序,显示等操作】...

目前博主只实现了查询和插入,而且还不太会在面板对数据库语句进行更新,写完再看感觉语言有些冗杂,往后再更,大半夜写这个也是醉了呢。import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListe…

重磅:.NET 6 发布首个预览版

前言2021 年 2 月 17 日微软发布了 .NET 6 的 Preview 1 版本,那么来看看都有什么新特性和改进吧,由于内容太多了因此只介绍一些较为重点的项目。ASP.NET Core 6 Preview 1 和 EF Core 6 Preview 1 同样有很多的更新内容,但是限于篇幅就不在这…

热键与快捷键

热键及快捷键(GtkAccelGroup) 热键:一般是字母带下划线.在当前控件内(如打开的菜单)可以用alt字母来代替点击的功能快捷键:一般指,在本窗口任何位置内,按某组合键,都可以代替点击的功能.:) 如果你的理解与我的有冲突,请以我的理解为准!试举例证:#include #include const char *…

python服务器qt客户端_python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例...

本文在上文的基础上重新实现支持多线程的服务器。以下为TCP客户端的程序代码:#!/usr/bin/env python3import sysfrom PyQt5.QtCore import (QByteArray, QDataStream, QDate, QIODevice,QRegExp, Qt)from PyQt5.QtWidgets import (QApplication, QDateEdit, QFrame,…

巧合?模仿还是抄袭?水木年华的《秋日恋歌》和Lube 乐队的《Pozovi Menya Tiho Po Imeni》...

今天听到了俄罗斯的Lube 乐队的《Pozovi Menya Tiho Po Imeni》,前奏感觉很好熟悉,继续听,有种似曾相识的感觉,曲风和演唱风格都很熟悉,我极力的回忆,依稀想起水木年华有一首《莫斯科的黄昏》的演唱风格是在…

UOS简单评测

一位网友安装了UOS系统,并录制了视频,这位网友告知,UOS使用中无卡顿,比较流畅。以下为机器的硬件配置。就操作系统最关键的软件生态而言,UOS自带40多款原创应用和一个有2000多款优质应用的商店,包括微信、Q…

python使用opencv查找轮廓_Python+opencv学习记录20:轮廓发现,Pythonopencv

1.轮廓发现轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果。1.1发现轮廓在此步骤中我们会使用到findContours这个API,其原型为:cv2.findContours(image, mode, method[, contours[, hier…

今天,送你一份交通行业最全数据集(共享单车、自动驾驶、网约出租车、交通信号识别)

近几年来共享单车、自动驾驶等交通行业发展得如荼如火,小编也一直有意识地收集相关数据集,经过长时间的积累和沉淀,已经拥有将近300G的交通数据,内容涵盖国内外“自动驾驶”、“共享单车”、“网约出租车”、“交通信号识别”等方…

空谈Saas都扯淡,让你看看真正的云计算

最近“虚拟化”的话题似乎热度有所降低,而“云计算”的概念却不断升温,就连Vmware的新的服务器虚拟化产品,都要加上一个第一款“云计算”操作系统,而正如hubisheng兄弟在《名头不小!!VMware vSphere实为VI升…

重要的是改变命运,而非升职加薪

阅读本文大概需要4分钟。写公众号以来,被问的最多的问题就是工作选择。在这件事上,很多读者明显会更重视薪资、福利、Title,而不是:未来会怎么样。就在昨天,又有一个读者问我Offer选择的问题,给出建议后&am…

python中的成员运算符是干嘛的_在Python中使用成员运算符的示例

下表列出了所有Python语言支持的成员运算符。例如:试试下面的例子就明白了所有的Python编程语言提供会员运算符:#!/usr/bin/pythona 10b 20list [1, 2, 3, 4, 5 ];if ( a in list ):print "Line 1 - a is available in the given list"else…

前方高能 | 你写过什么有趣的程序?最后一个笑出猪叫

苍冥 说:我们从高一到高三都强制采用图形计算器,可以画函数图像的那种。我们用的是德州仪器系列,Ti-Nspire,贵的要死要死的。然而我却买错了计算器的制式,便宜货,相比其他同学的系统少了很多重要的功能。作…

鼠标 . 软驱 . 打印机 . 硬盘. 风扇 . 常见事故处理 -

鼠标 . 软驱 . 打印机 . 硬盘. 风扇 . 常见事故处理 -鼠标鼠标的故障分析与维修比较简单,大部分故障为接口或按键接触不良、断线、机械定位系统污垢等原因造成的。少数故障为鼠标内部元器件或电路虚焊造成的,这主要存在于某些劣质产品中,其中…

php mysql 云虚拟机_虚拟机+apache+php+mysql 环境安装配置

虚拟机的安装:直接下一步即可,注意修改路径。安装完成后新建虚拟机,直接下一步。如果选择镜像文件后出现错误,可以试着去修改电脑bios中的虚拟化设置,改为enable,如下图:apache安装:…

python逐行读取数据时出现错误_python如何逐行读取数据

在实际开发的过程中,文件读写也很重要,下面说一下python如何逐行读取文件。如果程序要读取行,通常只能用文本方式来读取,道理很简单,只有文本文件才有行的概念,二进制文件没有所谓行的概念。文件对象提供了…

日志框架NLog之将日志发送到邮件

背景NLog可以将日志输出到不同的媒介上&#xff0c;邮件是其中一个&#xff0c;通过邮件可以让我们第一时间收到信息。使用SMTP协议通过电子邮件发送日志消息。与FallbackGroup Target很好地结合在一起&#xff0c;以创建具有多个SMTP主机的后备。配置语法<targets><t…