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…

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

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

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

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

UOS简单评测

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

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

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

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

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

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

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

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

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

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

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

简单六步,用数据说服你的听众

“相比表格,利用数据图展现数据的方法有可观的优势。庞大的数据令人厌烦,普通人在其中根本获取不到有用的信息,就像从黄瓜里面汲取不到阳光一样。”——摘取自《Economic and Industrial Delusions》一书,作者Arthur Briggs Farqu…

CCNA第五章WAN连接

转载于:https://blog.51cto.com/centrevy/176434

探索 .NET Core 依赖注入的 IServiceCollection

如果您使用了.NET Core,则很可能已使用Microsoft.Extensions.DependencyInjection中的内置依赖项注入容器,在本文中,我想更深入地了解Microsoft Dependency Injection(DI)容器中的 IServiceCollection。什么是依赖注入…

看完这13张图,不得不佩服还是外国人会玩人工智能

对于程序员来说,机器学习领域无疑充满着巨大的诱惑和挑战,很多人对里面复杂的概念和算法头疼不已,那么,有没有一套对新手既友好又明了,对老手能加深印象,不断复习的学习办法呢?有,今…

EFCore查缺补漏(二):查询

相关文章: EFCore查缺补漏第 20 轮 TechEmpower 评测结果出炉了,ASP.NET Core 的 Plaintext 成绩名列前茅,带着 EFCore 的测试却在 Single query / Multiple queries / Fortunes 中落了下风,成绩远不如 dapper,更不如直…

如何在mysql中打开mongodb_图解:如何从MySQL移植到MongoDB

【IT168 技术】下图是使用 SQL 和 MongoDB 的对应信息图表,点击图片查看大图:MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似…

仿真模拟,需要注意这几点!

周日晚上的直播甚是精彩先是潘同学分享了获奖论文和解题技巧接着是董同学分享了论文的写作小技巧po几张截图让大家感受下此时此刻可能会有不少童鞋正在为错过直播而懊悔不用担心超模君还准备了一份豪华大礼本周超模君特意邀请到今年美赛D题特等奖获奖者谢挺同学(获奖…

php 结构体_php基础知识集合

微信公众号:PHP在线源码PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法编译器编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (prepr…

Kubernetes 凭什么成了云原生应用底座?

微软开源的 云原生应用开发的框架 Dapr 发布了1.0 版本《Dapr 正式发布 1.0》,云原生应用开发更加简单容易,Dapr 的容器编排环境也是用的Kubernetes。过去几年,以 Docker、Kubernetes 为代表的容器技术已发展为一项通用技术,BAT、…

【汇总推荐】深度学习、自然语言处理干货笔记汇总

今天这篇文章对十一月份推送的干货笔记,做一个总结,大家可以进行分类查找,希望对大家有所帮助。人工智能实战技巧与学习方法系列免费公开课【重磅福利】人工智能实战技能与学习方法系列公开课免费分享深度学习干货文章【直观理解】一文搞懂RN…

mongodb时间范围查询少8个小时_为何要对开源mongodb数据库内核做二次开发

关于作者前滴滴出行技术专家,现任OPPO文档数据库mongodb负责人,负责oppo千万级峰值TPS/十万亿级数据量文档数据库mongodb内核研发及运维工作,一直专注于分布式缓存、高性能服务端、数据库、中间件等相关研发。后续持续分享《MongoDB内核源码设…