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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 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

目录
打赏
0
1
1
0
8
分享
相关文章
使用温InnoDB缓冲池启动MySQL测试
使用温InnoDB缓冲池启动MySQL测试
77 0
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
1309 57
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL存储引擎详述:InnoDB为何胜出?
MySQL 是最流行的开源关系型数据库之一,其存储引擎设计是其高效灵活的关键。InnoDB 作为默认存储引擎,支持事务、行级锁和外键约束,适用于高并发读写和数据完整性要求高的场景;而 MyISAM 不支持事务,适合读密集且对事务要求不高的应用。根据不同需求选择合适的存储引擎至关重要,官方推荐大多数场景使用 InnoDB。
175 7
Mysql索引:深入理解InnoDb聚集索引与MyisAm非聚集索引
通过本文的介绍,希望您能深入理解InnoDB聚集索引与MyISAM非聚集索引的概念、结构和应用场景,从而在实际工作中灵活运用这些知识,优化数据库性能。
498 7
MySQL引擎InnoDB和MyISAM的区别?
InnoDB是MySQL默认的事务型存储引擎,支持事务、行级锁、MVCC、在线热备份等特性,主索引为聚簇索引,适用于高并发、高可靠性的场景。MyISAM设计简单,支持压缩表、空间索引,但不支持事务和行级锁,适合读多写少、不要求事务的场景。
124 9
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
312 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
【赵渝强老师】MySQL InnoDB的段、区和页
MySQL的InnoDB存储引擎逻辑存储结构与Oracle相似,包括表空间、段、区和页。表空间由段和页组成,段包括数据段、索引段等。区是1MB的连续空间,页是16KB的最小物理存储单位。InnoDB是面向行的存储引擎,每个页最多可存放7992行记录。
190 5
《数字证书:互联网世界的"身份证"与"防盗门"》 ——揭秘网络安全背后的加密江湖
在2023年某深夜,上海陆家嘴金融公司机房遭遇黑客攻击,神秘青铜大门与九大掌门封印的玉牌突现,阻止了入侵。此门象征数字证书,保障网络安全。数字证书如验钞机识别假币,保护用户数据。它通过SSL/TLS加密、CA认证和非对称加密,构建安全通信。证书分为DV、OV、EV三类,分别适合不同场景。忽视证书安全可能导致巨额损失。阿里云提供一站式证书服务,助力企业部署SSL证书,迎接未来量子计算和物联网挑战。
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。

数据库

+关注

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多
    AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等