MySQL8.4创建keyring给InnoDB表进行静态数据加密

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: MySQL8.4创建keyring给InnoDB表进行静态数据加密

参考文档:

https://developer.hashicorp.com/vault/install

https://dev.mysql.com/doc/refman/8.4/en/keyring-plugin-installation.html

https://dev.mysql.com/doc/refman/8.4/en/keyring-hashicorp-plugin.html#keyring-hashicorp-vault-configuration

1.首先创建放key的目录

mkdir -p /u01/mysql3308/keyring
cd /u01/mysql3308/keyring

2.创建公司Key company.key和HashiCorp Vault server的key vault.key

openssl genrsa -aes256 -out company.key 4096
openssl genrsa -aes256 -out vault.key 2048

3.使用公司Key company.key创建公司CA证书company.crt

openssl req -x509 -new -nodes -key company.key -sha256 -days 365 -out company.crt

出现这些可以默认回车

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

4.创建证书签名配置选项

[root@mysql8_3 keyring]# vim request.conf
[req]
distinguished_name = vault
x509_entensions = v3_req
prompt = no
[vault]
C = US
ST = CA
L = RWC
O = Company
CN = 127.0.0.1
[v3_req]
subjectAltName = @alternatives
authorityKeyIdentifier = keyid,issuer
basicConstraints = CA:TRUE
[alternatives]
IP = 127.0.0.1

5.保存后,执行命令生成签名,生成request.csr 签名

openssl req -new -key vault.key -config request.conf -out request.csr

6.创建 HashiCorp Vault服务证书vault.crt

openssl x509 -req -in request.csr -CA company.crt -CAkey company.key -CAcreateserial -out vault.crt -days 365 -sha256

7.为了让公司证书与服务器证书一起在请求中传递,将 company.crt 公司证书的内容附加到vault.crt 服务器证书后面

cat company.crt >> vault.crt

显示成这样

[root@mysql8_3 keyring]# cat vault.crt
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----

8.下载和安装HashiCorp Vault程序,我的是Oracle Linux 8,其他安装方式参考网址https://developer.hashicorp.com/vault/install

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install vault

9.创建存储文件路径,创建HashiCorp Vault服务配置文件

mkdir -p /u01/mysql3308/keyring/storage
[root@mysql8_3 keyring]# cat config.hcl
listener "tcp" {
address="127.0.0.1:8200"
tls_cert_file="/u01/mysql3308/keyring/vault.crt"
tls_key_file="/u01/mysql3308/keyring/vault.key"
}
storage "file" {
path = "/u01/mysql3308/keyring/storage"
}
ui = true

10.启动HashiCorp Vault服务

[root@mysql8_3 keyring]# vault server -config=config.hcl

将启动一个8200端口的服务

[root@mysql8_3 keyring]# netstat -ntpla| grep 8200

tcp 0 0 127.0.0.1:8200 0.0.0.0:* LISTEN 21264/vault

11.初始化HashiCorp Vault服务

export VAULT_SKIP_VERIFY=1
vault operator init -n 1 -t 1

12.保存后key和token后面要用

[root@mysql8_3 keyring]# vault operator init -n 1 -t 1
WARNING! VAULT_ADDR and -address unset. Defaulting to https://127.0.0.1:8200.
Unseal Key 1: r81ShPQoJ10O+CYPGlQYq+c9Qn5KHO37/Q8uWjK+PnI=
Initial Root Token: hvs.JX41AXNkdKeMhwXCd7u3caHT

13.启用HashiCorp Vault服务,输入上面的key

[root@mysql8_3 keyring]# vault operator unseal

将启动一个8201端口的服务

[root@mysql8_3 data]# netstat -antupl | grep 8201

tcp 0 0 127.0.0.1:8201 0.0.0.0:* LISTEN 21264/vault

14.用上面token登录HashiCorp Vault服务

[root@mysql8_3 keyring]# vault login hvs.JX41AXNkdKeMhwXCd7u3caHT

15.验证Vault服务状态

[root@mysql8_3 keyring]# vault status

16.设置HashiCorp Vault认证和存储

启用AppRole认证方法并检查

[root@mysql8_3 keyring]# vault auth enable approle
[root@mysql8_3 keyring]# vault auth list

启用Vault KeyValue存储引擎

[root@mysql8_3 keyring]# vault secrets enable -version=1 kv

17.创建并设置一个名为mysql的规则,并在keyring_hashicorp插件使用

[root@mysql8_3 keyring]# vault write auth/approle/role/mysql token_num_uses=0 token_ttl=20m token_max_ttl=30m secret_id_num_uses=0

18.添加AppRole安全策略

[root@mysql8_3 keyring]# more mysql.hcl
path "kv/mysql/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
[root@mysql8_3 keyring]# vault policy write mysql-policy mysql.hcl
[root@mysql8_3 keyring]# vault write auth/approle/role/mysql policies=mysql-policy

获取role-id和生成secret_id

[root@mysql8_3 keyring]# vault read auth/approle/role/mysql/role-id
[root@mysql8_3 keyring]# vault write -f auth/approle/role/mysql/secret-id

图片

19.配置my.cnf,并写入role_id和secret_id,然后重启服务

[mysqld]
early-plugin-load=keyring_hashicorp.so
keyring_hashicorp_role_id='bda74cbf-a88a-5df3-5a40-e1a6fddab487'
keyring_hashicorp_secret_id='e0a512bc-557d-cc7c-07ab-6ccee5eae66c'
keyring_hashicorp_store_path='/v1/kv/mysql'
keyring_hashicorp_auth_path='/v1/auth/approle/login'
[root@mysql8_3 mysql3308]# systemctl start mysqld83308.service
[root@mysql8_3 mysql3308]# systemctl status mysqld83308.service

20.设置 keyring_hashicorp_server_url访问的IP和端口

mysql> SET GLOBAL keyring_hashicorp_server_url = 'https://127.0.0.1:8201';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT keyring_hashicorp_update_config();
+----------------------------------------------------------------------------+
| keyring_hashicorp_update_config()|
+----------------------------------------------------------------------------+
| 0x436F6E66696775726174696F6E2075706461746520776173207375636365737366756C2E |
+----------------------------------------------------------------------------+
1 row in set (0.01 sec)

出现了16进制的日志信息,转换文本为 Configuration update was successful.

21.查看插件

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

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

| PLUGIN_NAME | PLUGIN_STATUS |

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

| keyring_hashicorp | ACTIVE |

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

2 rows in set (0.00 sec)

mysql> SELECT * FROM performance_schema.keyring_keys;

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

| KEY_ID | KEY_OWNER | BACKEND_KEY_ID |

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

| INNODBKey-4966325d-1509-11f0-a15f-525400381583-1 | | |

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

1 row in set (0.00 sec)
6qrt4xwe6vjg6_f3359c8613e64bd1a3b29d113e3f22b6.png

相关文章
|
3月前
|
存储 SQL 关系型数据库
MySQL底层概述—2.InnoDB磁盘结构
InnoDB磁盘结构主要包括表空间(Tablespaces)、数据字典(Data Dictionary)、双写缓冲区(Double Write Buffer)、重做日志(redo log)和撤销日志(undo log)。其中,表空间分为系统、独立、通用、Undo及临时表空间,分别用于存储不同类型的数据。数据字典从MySQL 8.0起不再依赖.frm文件,转而使用InnoDB引擎存储,支持事务原子性DDL操作。
316 100
MySQL底层概述—2.InnoDB磁盘结构
|
3月前
|
缓存 算法 关系型数据库
MySQL底层概述—1.InnoDB内存结构
本文介绍了InnoDB引擎的关键组件和机制,包括引擎架构、Buffer Pool、Page管理机制、Change Buffer、Log Buffer及Adaptive Hash Index。
341 97
MySQL底层概述—1.InnoDB内存结构
|
21天前
|
SQL 缓存 关系型数据库
使用温InnoDB缓冲池启动MySQL测试
使用温InnoDB缓冲池启动MySQL测试
40 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL底层概述—10.InnoDB锁机制
本文介绍了:锁概述、锁分类、全局锁实战、表级锁(偏读)实战、行级锁升级表级锁实战、间隙锁实战、临键锁实战、幻读演示和解决、行级锁(偏写)优化建议、乐观锁实战、行锁原理分析、死锁与解决方案
202 24
MySQL底层概述—10.InnoDB锁机制
|
3月前
|
存储 缓存 关系型数据库
MySQL底层概述—5.InnoDB参数优化
本文介绍了MySQL数据库中与内存、日志和IO线程相关的参数优化,旨在提升数据库性能。主要内容包括: 1. 内存相关参数优化:缓冲池内存大小配置、配置多个Buffer Pool实例、Chunk大小配置、InnoDB缓存性能评估、Page管理相关参数、Change Buffer相关参数优化。 2. 日志相关参数优化:日志缓冲区配置、日志文件参数优化。 3. IO线程相关参数优化: 查询缓存参数、脏页刷盘参数、LRU链表参数、脏页刷盘相关参数。
154 12
MySQL底层概述—5.InnoDB参数优化
|
3月前
|
存储 SQL 关系型数据库
MySQL底层概述—4.InnoDB数据文件
本文介绍了InnoDB表空间文件结构及其组成部分,包括表空间、段、区、页和行。表空间是最高逻辑层,包含多个段;段由若干个区组成,每个区包含64个连续的页,页用于存储多条行记录。文章还详细解析了Page结构,分为通用部分(文件头与文件尾)、数据记录部分和页目录部分。此外,文中探讨了行记录格式,包括四种行格式(Redundant、Compact、Dynamic和Compressed),重点介绍了Compact行记录格式及其溢出机制。最后,文章解释了不同行格式的特点及应用场景,帮助理解InnoDB存储引擎的工作原理。
MySQL底层概述—4.InnoDB数据文件
|
3月前
|
存储 缓存 关系型数据库
MySQL底层概述—3.InnoDB线程模型
InnoDB存储引擎采用多线程模型,包含多个后台线程以处理不同任务。主要线程包括:IO Thread负责读写数据页和日志;Purge Thread回收已提交事务的undo日志;Page Cleaner Thread刷新脏页并清理redo日志;Master Thread调度其他线程,定时刷新脏页、回收undo日志、写入redo日志和合并写缓冲。各线程协同工作,确保数据一致性和高效性能。
MySQL底层概述—3.InnoDB线程模型
|
16天前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
2月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
16天前
|
存储 关系型数据库 MySQL
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
本文详细介绍了在 MySQL 中创建数据库和表的方法。包括安装 MySQL、用命令行和图形化工具创建数据库、选择数据库、创建表(含数据类型介绍与选择建议、案例分析、最佳实践与注意事项)以及查看数据库和表的内容。文章专业、严谨且具可操作性,对数据管理有实际帮助。
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂

相关产品

  • 云数据库 RDS MySQL 版