MySQL 8.0.35 企业版安装和启用TDE插件keyring_encrypted_file

news2024/11/19 9:38:28

本文主要记录MySQL企业版TDE插件keyring_encrypted_file的安装和使用。

TDE说明

TDE( Transparent Data Encryption,透明数据加密) 指的是无需修改应用就可以实现数据的加解密,在数据写磁盘的时候加密,读的时候自动解密。加密后其他人即使能够访问数据库文件,没有key也无法读取数据,从而达到防止非法访问的目的。

  • MySQL的支持情况

InnoDB使用的是两层的加密键架构,包括一个master加密键和表空间加密键,master加密键是用来加解密表空间键的,而表空间加密键保持不变,放置在表空间文件的文件头,这样可以不时轮换master的加密键,从而提供更高的安全性,而表空间的数据不用重新进行加解密,节省时间,对生产系统的影响也较小。

静态数据加密功能支持基于高级加密标准 (Advanced EncryptionStandard,AES) 块的加密算法。它使用电码本(Electronic Codebook ) 块加密模式进行表空间密钥加密,使用密码分组链接 (CipherBlock Chaining) 块加密模式进行数据加密。

加密的key都是通过keyring(钥匙圈)来进行管理的,使用的是插件和组件的形式。这些插件或组件使用本身的后台存储或者与其它的密钥后端存储系统通信,MySQL 5.7开始支持TDE,8.0提供更多的加密选项,社区版和企业版都可以,区别是企业版提供额外的keyring组件和插件,可以提供更好的安全性,如果要达到合规的要求,需要使用企业版,详细支持情况列表如下。

对于不同的版本,支持的文件加密也是有区别的,8.0.23或以上,支持的加密包括有:独立表空间、通用表空间、DoubleWrite文件、mysql系统表空间、Redo log和UndoLog文件的加密。

根据官方文档,启用后性能影响百分比在个位数,实际的影响情况可用工作负载测试下。启用加密后,数据库的占用空间也变化不大。

启用加密后,对于备份策略也需要调整,需要考虑到master键的保存,并不时作备份恢复测试,确保即使生产数据完全丢失也可以恢复数据。要注意的是,如果使用MySQL Enterprise Backup (MEB)备份TDE的表空间,备份下来也是加密的,而mysqldump备份是没有加密的,考虑到安全问题可手动加密。

一、系统环境

操作系统:Ubuntu 20.04.5 LTS

数据库版本:8.0.35-commercial MySQL Enterprise Server - Commercial

TDE插件类型:keyring_encrypted_file

二、添加配置文件

vim /etc/mysql/mysql.conf.d/mysqld.cnf

添加到mydqld下

[mysqld]

# keyring
early-plugin-load=keyring_encrypted_file.so
keyring_file_data=/database/mysql/keyring/keyring_file
keyring_encrypted_file_password=uYeW0fD6aODGzgWz

三、添加目录和授权

根据配置创建保持key的目录和授权。否则启动会报权限问题。

mkdir -p /database/mysql/keyring
chown -R mysql:mysql /database/mysql/keyring/
chmod 750 /database/mysql/keyring/
三、安装插件

使用下面命令安装插件

INSTALL PLUGIN keyring_file soname 'keyring_file.so';

题外话 卸载插件 UNINSTALL PLUGIN keyring_file;

四、查看插件安装情况
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';

ACTIVE表明插件已经安装成功

五、重启后插件生效
systemctl start mysql

下面是启动后mysql的日志

root@xmachine:/home/admin# tail -n 100 /var/log/mysql/error.log

2024-03-04T07:39:08.736046Z 0 [Warning] [MY-010139] [Server] Changed limits: max_open_files: 10000 (requested 10240)
2024-03-04T07:39:08.990458Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2024-03-04T07:39:08.990490Z 0 [Warning] [MY-011068] [Server] The syntax 'slave_skip_errors' is deprecated and will be removed in a future release. Please use replica_skip_errors instead.
2024-03-04T07:39:08.990526Z 0 [Warning] [MY-010915] [Server] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
2024-03-04T07:39:08.992119Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.35-commercial) starting as process 3889861
2024-03-04T07:39:08.996032Z 0 [Warning] [MY-013360] [Server] Plugin keyring_encrypted_file reported: ''keyring_encrypted_file plugin' is deprecated and will be removed in a future release. Please use component_keyring_encrypted_file instead'
2024-03-04T07:39:08.997311Z 0 [Warning] [MY-013907] [InnoDB] Deprecated configuration parameters innodb_log_file_size and/or innodb_log_files_in_group have been used to compute innodb_redo_log_capacity=4294967296. Please use innodb_redo_log_capacity instead.
2024-03-04T07:39:08.999044Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-03-04T07:39:09.533703Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-03-04T07:39:09.649068Z 0 [Warning] [MY-013360] [Server] Plugin keyring_file reported: ''keyring_file plugin' is deprecated and will be removed in a future release. Please use component_keyring_file instead'
2024-03-04T07:39:09.759970Z 0 [Warning] [MY-010068] [Server] CA certificate /database/mysql/ca.pem is self signed.
2024-03-04T07:39:09.759999Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2024-03-04T07:39:09.791955Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2024-03-04T07:39:09.792000Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.35-commercial'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Enterprise Server - Commercial.
六、查询插件状态

查看加密插件状态

select plugin_name,plugin_status from information_schema.plugins where plugin_name like 'keyring%';

查询主密钥文件的位置

show variables like 'keyring_file_data';

查看相应的目录是否生成加密key文件。

 

查看密钥

show variables like '%keyring%';

七、加密和解密表操作
# 数据表创建时加密:

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

# 已创建数据表加密

ALTER TABLE t1 ENCRYPTION='Y'

# 数据表解密:

ALTER TABLE t1 ENCRYPTION='N'
八、轮换主密钥

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

ALTER INSTANCE ROTATE INNODB MASTER KEY;

九、查看表加密状态

查看加密的表:

SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE CREATE_OPTIONS LIKE '%ENCRYPTION%';

查看未加密的表

select concat(TABLE_SCHEMA,".",TABLE_NAME) from INFORMATION_SCHEMA.TABLES where (TABLE_SCHEMA,TABLE_NAME) not in (SELECT TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE CREATE_OPTIONS LIKE '%ENCRYPTION%' and table_schema not in ('information_schema','performance_schema','sys','mysql','universe')) and TABLE_SCHEMA in ('mydata');
十、其他

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

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

相关文章

Vue-03

Vue指令 v-bind 作用:动态设置html的标签属性(src url title…) 语法:v-bind:属性名"表达式" 举例代码如下: 实现效果如下: 案例:图片切换 实现代码如下: 实现的效果…

#WEB前端(CCS常用属性,补充span、div)

1.实验: 复合元素、行内元素、块内元素、行内块元素 2.IDE:VSCODE 3.记录: span为行内元素:不可设置宽高,实际占用控件决定分布空间。 div为块内元素:占满整行,可以设置宽高 img为行内块元…

新手想玩硬件,买单片机还是树莓派好?

新手想玩硬件,买单片机还是树莓派好? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家&#x…

单链表的排序-力扣算法题

文章目录 概要例题解题思路:1、递归分割2、递归排序实际的含义3、递归回溯与合并 case解析:1、初始链表:2、第一轮分割:3、继续分割:有序子链表合并:最终合并:结果: 代码实现总结&am…

JavaScript继承 寄生组合式继承 extends

JavaScript继承 1、JS 的继承到底有多少种实现方式呢? 2、ES6 的 extends 关键字是用哪种继承方式实现的呢? 继承种类 原型链继承 function Parent1() {this.name parentlthis.play [1, 2, 3] }function Child1() {this.type child2 }Child1.prototype new Parent1(…

(十)SpringCloud系列——openfeign的高级特性实战内容介绍

前言 本节内容主要介绍一下SpringCloud组件中微服务调用组件openfeign的一些高级特性的用法以及一些常用的开发配置,如openfeign的超时控制配置、openfeign的重试机制配置、openfeign集成高级的http客户端、openfeign的请求与响应压缩功能,以及如何开启…

bashplotlib,一个有趣的 Python 数据可视化图形库

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站AI学习网站。 目录 前言 什么是Bashplotlib库? 安装Bashplotlib库 使用Bashplotlib库 Bashplotlib库的功能特性 1. 绘…

Linux速览(1)——基础指令篇

在上一章对Linux有了一些基础了解之后,本章我们来学习一下Linux系统下一些基本操作的常用的基础指令。 目录 1. ls 指令 2. pwd&&whoami命令 3. cd 指令 4. touch指令 5.mkdir指令(重要): 6.rmdir指令 && …

pandas行列求众数及按列去重

创建示例数据框如下: df2pd.DataFrame(data{A:[1,2,3,3,4,4,4,4],B:[a,b,c,c,d,d,d,d],C:[11,22,33,33,44,44,44,44],D:[11,22,33,33,44,44,44,44]}) print(df2.mode()) #求列众数 print(df2.loc[:,[A,C,D]].mode(axis1)) #求特定列的行众数 df2.drop_duplicates(s…

记一次:android学习笔记一(学习目录-不要看无内容)

学习目录如下 B站学习的名称--Android开发从入门到精通(项目案例版) 网址:https://www.bilibili.com/video/BV1jW411375J/ 第0章:安装 android stoid 参考地址https://blog.csdn.net/adminstate/article/details/130542368 第一章:第一个安卓应用 第二章:用户界面设…

类和对象基础知识

1. C和C语言最大的区别 以洗衣服为例, C语言是手洗,你需要对每一个过程非常的清楚,一步一步都需要自己亲自去完成, 而C更像是机洗,整个过程划分为人、衣服、洗衣粉、洗衣机四个对象的交互过程, 而人是不…

C语言指针的初步认识--学习笔记(2)

1.数组名的理解 我们在使⽤指针访问数组的内容时,有这样的代码: int arr[10]{1,2,3,4,5,6,7,8,9,10}; int* p&arr[0]; 这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址,⽽且 是数组…

React 事件机制原理

相关问题 React 合成事件与原生 DOM 事件的区别React 如何注册和触发事件React 事件如何解决浏览器兼容问题 回答关键点 React 的事件处理机制可以分为两个阶段:初始化渲染时在 root 节点上注册原生事件;原生事件触发时模拟捕获、目标和冒泡阶段派发合…

羊大师揭秘羊奶与健康,美味的保健佳品

羊大师揭秘羊奶与健康,美味的保健佳品 羊奶确实是一种美味且健康的保健佳品,其独特的营养成分和风味使其成为许多人的健康选择。以下是一些羊奶与健康的关系: 营养丰富:羊奶含有丰富的蛋白质、脂肪、矿物质和维生素,…

Go字符串实战操作大全!

目录 1. 引言文章结构概览 2. Go字符串基础字符串的定义与特性什么是字符串?Go字符串的不可变性原则 字符串的数据结构Go字符串的内部表达byte和rune的简介 3. 字符串操作与应用3.1 操作与应用字符串连接字符串切片字符串查找字符串比较字符串的替换字符串的大小写转…

【动态规划专栏】

动态规划基础知识 概念 动态规划(Dynamic Programming,DP):用来解决最优化问题的算法思想。 动态规划是分治思想的延伸,通俗一点来说就是大事化小,小事化无的艺术。 一般来说,…

Android 开发环境搭建的步骤

本文将为您详细讲解 Android 开发环境搭建的步骤。搭建 Android 开发环境需要准备一些软件和工具,以下是一些基础步骤: 1. 安装 Java Development Kit (JDK) 首先,您需要安装 Java Development Kit (JDK)。JDK 是 Android 开发的基础&#xf…

教师的调动谁有决定权

当你身边的老师突然“消失”,在另一所学校出现,你是否好奇过,这背后的调动是如何发生的?谁又是这场“迁徙”背后的决定者? 很多人可能首先想到的是校长。毕竟,在学校里,校长似乎是那个“发号施令…

前端从普通登录到单点登录(SSO)

随着前端登录场景的日益复杂化和技术思想的不断演进,前端在登录方面的知识结构变得越来越复杂。对于前端开发者来说,在日常工作中根据不同的登录场景提供合适的解决方案是我们的职责所在,本文将梳理前端登录的演变过程。 1、无状态的HTTP H…

【论文阅读】TensoRF: Tensorial Radiance Fields 张量辐射场

发表于ECCV2022. 论文地址:https://arxiv.org/abs/2203.09517 源码地址:https://github.com/apchenstu/TensoRF 项目地址:https://apchenstu.github.io/TensoRF/ 摘要 本文提出了TensoRF,一种建模和重建辐射场的新方法。不同于Ne…