MySQL儲存安全
設定透明資料加密TDE、自動備份資料等。
一、mysql啟用tde透明加密
MySQL資料庫儲存加密有多種方式可供選擇,主要分為兩大類:
利用欄位加密,在對資料庫儲存/讀取時進行加密/解密操作,需要使用者修改應用程式
利用TDE透明加密客戶端,實現資料庫例項檔案儲存加密,使用者無需修改應用程式
下面以 MySQL 表空間加密為例,介紹mysql如何實現TDE透明加密。
tde 概述
TDE(Transparent Data Encryption,透明資料加密) 即對資料檔案執行實時I/O加密和解密。資料在寫入磁碟之前進行加密,從磁碟讀入記憶體時進行解密。TDE透過對MySQL資料庫中的表空間進行加密,阻止可能的攻擊者繞過資料庫直接從儲存中讀取敏感資訊。TDE加密具有如下優點:
開發人員無需更改任何應用程式
根據官方文件,啟用後效能影響百分比在個位數(經驗5%),啟用TDE不會增加資料檔案的大小
mysql對tde的支援情況
MySQL 5.7 開始支援TDE,8.0提供更多的加密選項,社群版和企業版都可以,區別是企業版提供額外的keyring元件和外掛,可以提供更好的安全性(如果要達到合規的要求,需要使用企業版),詳細支援情況如下表所示:
keyring外掛名稱 社群版 企業版 備註
component_keyring_file 8.0.24+ 8.0.24+
component_keyring_encrypted_file 不支援 8.0.24+-
component_keyring_oci 不支援 8.0.31+-
keyring_file 5.7.11+ 5.7.11+ 將秘鑰資料儲存在本地的檔案
keyring_encrypted_file 不支援 5.7.21+ 將秘鑰資料儲存在本地的加密檔案
keyring_okv 不支援 5.7.12+-
keyring_aws 不支援 5.7.19+ 與Amazon KMS通訊,用於後端儲存
keyring_hashicorp 不支援 8.0.18+ 與HashiCorp Vault通訊,用於後端儲存
keyring_oci 不支援 8.0.22+-
2)基於keyring_file外掛的tde透明資料加密實戰
準備工作:安全起見,啟用TDE之前建議先做一次完整備份
mysqldump --single-transaction --master-data=2 --flush-logs --triggers --events --routines --skip-tz-utc -uroot -p -A > alldb_2023.sql
第1步,建立金鑰檔案(比如keyring)的儲存目錄,比如 /data/mysql_3306/keyring
mkdir -p /data/mysql_3306/keyring
chown -R mysql:mysql /data/mysql_3306/keyring
chmod -R 775 /data/mysql_3306/keyring
第2步,找到加密外掛檔案 keyring_file.so 所在的目錄,比如 /opt/mysql/lib/mysql/plugin/
[root@localhost ~]# find / -name keyring_file.so
/opt/mysql/lib/mysql/plugin/keyring_file.so
第3步,修改MySQL配置檔案,啟用資料加密功能(持久化啟用)
[mysqld]
plugin_dir=/opt/mysql/lib/mysql/plugin/early-plugin-load=keyring_file.so
keyring_file_data=/data/mysql_3306/keyring/keyring
innodb_file_per_table=1
第4步,確認上述配置已修改,並重啟mysql示例使配置生效
[root@localhost ~]# cat /data/mysql_3306/my_3306.cnf | egrep "(plugin_dir|keyring_file|innodb_file_per_table)"
plugin_dir=/opt/mysql/lib/mysql/plugin/early-plugin-load=keyring_file.so
keyring_file_data=/data/mysql_3306/keyring/keyring
innodb_file_per_table = 1
[root@localhost ~]# ps -ef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9 2> /dev/null
[root@localhost ~]# /opt/mysql/bin/mysqld_safe --defaults-file=/data/mysql_3306/my_3306.cnf &
第5步,確認加密外掛相關配置已啟用
mysql> show variables like 'plugin_dir';
+---------------+------------------------------+
| Variable_name | Value |
+---------------+------------------------------+
| plugin_dir | /opt/mysql/lib/mysql/plugin/ |
+---------------+------------------------------+
mysql> SELECT PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_Library FROM information_schema.plugins WHERE PLUGIN_NAME LIKE 'keyring_file';
+--------------+---------------+-----------------+
| PLUGIN_NAME | PLUGIN_STATUS | PLUGIN_Library |
+--------------+---------------+-----------------+
| keyring_file | ACTIVE | keyring_file.so |
+--------------+---------------+-----------------+
mysql> show global variables like 'keyring_file_data';
+-------------------+----------------------------------+
| Variable_name | Value |
+-------------------+----------------------------------+
| keyring_file_data | /data/mysql_3306/keyring/keyring |
+-------------------+----------------------------------+
mysql> show global variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
第6步,先選擇要加密的資料庫,再選擇要加密的表,並將其加密
mysql> CREATE DATABASE IF NOT EXISTS testdb;
mysql> CREATE TABLE testdb.tde_yes(c1 varchar(20)) ENCRYPTION='Y';
mysql> CREATE TABLE testdb.tde_no(c1 varchar(20));
mysql> ALTER TABLE testdb.tde_yes ENCRYPTION='Y';
mysql> INSERT INTO testdb.tde_yes VALUES('aaa');
mysql> INSERT INTO testdb.tde_no VALUES('aaa');
第7步,檢視哪些表已啟用TDE解密
mysql> SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE CREATE_OPTIONS LIKE '%ENCRYPTION%';
+--------------+------------+----------------+
| TABLE_SCHEMA | TABLE_NAME | CREATE_OPTIONS |
+--------------+------------+----------------+
| testdb | tde_yes | ENCRYPTION="Y" |
+--------------+------------+----------------+
注意事項
MySQL的keyring_file加密會有以下限制,使用時需要注意:
使用keyring_file 和 keyring_encrypted file 外掛時,無法滿足某些規範要求的金鑰集中管理
高階加密標準(AES)是唯一支援的加密演算法
表空間加密僅支援儲存在單獨表空間的InnoDB表,儲存在其他InnoDB表空間型別(包括常規表空間,系統表空間,撤消日誌表空間和臨時表空間)中的表不支援加密。
一次只能啟用一個keyring外掛,不支援啟用多個keyring外掛
開啟TDE後,由於查詢表資料時會解密並讀取到記憶體中,因此查詢加密的資料時結果仍是明文資料,而常用資料庫工具(Navicat等)可以正常使用
如果資料庫例項上擁有至少一個加密的資料庫,那麼也可能會降低未加密資料庫的效能,所以建議加密資料庫和未加密資料庫儲存在不同的資料庫例項上
更改金鑰外掛需要解密表,解除安裝當前的金鑰外掛,安裝和配置其他金鑰外掛,並重新加密表
已經被加密的表(Innodb引擎)不允許修改成其它儲存引擎
mysql> alter table testdb.tde_yes ENGINE=MyISAM;
ERROR 1478 (HY000): Table storage engine 'MyISAM' does not support the create option 'ENCRYPTION'
[實測] 先配置主從複製,再分別啟用tde加密,不會導致主從複製失敗(即使主庫與從庫使用的不是同一個金鑰檔案)
場景1:模擬秘鑰檔案被誤刪
第1步,備份秘鑰之後將其刪除,可模擬秘鑰檔案被誤刪
[root@localhost ~]# ll /data/mysql_3306/keyring/
-rw-r----- 1 mysql mysql 0 Oct 18 10:24 keyring
[root@localhost ~]# cp /data/mysql_3306/keyring/keyring /tmp/keyring.20231019
[root@localhost ~]# rm -f /data/mysql_3306/keyring/keyring
第2步,向加密表(示例testdb.tde_yes)寫入資料,未重啟mysql示例之前讀寫正常
mysql> insert into testdb.tde_yes VALUES('bbb');
mysql> select * from testdb.tde_yes;
+------+
| c1 |
+------+
| aaa |
| bbb |
+------+
第3步,重啟mysql示例,自動生成新的秘鑰檔案,可模擬秘鑰檔案錯誤
[root@localhost ~]# ps -ef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9 2> /dev/null
[root@localhost ~]# /opt/mysql/bin/mysqld_safe --defaults-file=/data/mysql_3306/my_3306.cnf &
[root@localhost ~]# ll /data/mysql_3306/keyring/
-rw-r----- 1 mysql mysql 0 Oct 19 16:12 keyring
第4步,加密表仍存在但查詢資料失敗
mysql> show tables from testdb;
+------------------+
| Tables_in_testdb |
+------------------+
| tde_no |
| tde_yes |
+------------------+
mysql> select * from testdb.tde_no;
+------+
| c1 |
+------+
| aaa |
+------+
mysql> select * from testdb.tde_yes;
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.
第5步,殺掉mysql程序,用老的秘鑰檔案覆蓋,再啟動mysql程序
[root@localhost ~]# ps -ef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9 2> /dev/null
[root@localhost ~]# \cp /tmp/keyring.20231019 /data/mysql_3306/keyring/keyring
[root@localhost ~]# /opt/mysql/bin/mysqld_safe --defaults-file=/data/mysql_3306/my_3306.cnf &
第6步,查詢加密表正常
mysql> select * from testdb.tde_yes;
+------+
| c1 |
+------+
| aaa |
| bbb |
+------+
結論:秘鑰在mysql例項啟動時會對加密表空間進行解密,如果秘鑰丟失會導致無法開啟加密表空間,造成資料丟失,必須妥善保管秘鑰。
場景2:秘鑰輪轉之後老秘鑰還能用嗎
第1步,將秘鑰檔案備份一下
[root@localhost ~]# cd /data/mysql_3306/keyring/
[root@localhost ~]# cp keyring keyring.old
[root@localhost ~]# ll
-rw-r----- 1 mysql mysql 283 Oct 20 16:49 keyring
-rw-r----- 1 root root 283 Oct 20 16:49 keyring.old
第2步,對主秘鑰執行輪換,生成新的秘鑰檔案(注意修改時間)
mysql> ALTER INSTANCE ROTATE INNODB MASTER KEY;
[root@localhost ~]# ll /data/mysql_3306/keyring
-rw-r----- 1 mysql mysql 667 Oct 24 11:04 keyring
-rw-r----- 1 root root 283 Oct 20 16:49 keyring.old
第3步,先殺掉mysql程序(保證在mysql服務停止狀態下替換秘鑰),再用老的秘鑰檔案替換
[root@localhost ~]# ps -ef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9 2> /dev/null
[root@localhost ~]# mv keyring keyring.new
[root@localhost ~]# mv keyring.old keyring
[root@localhost ~]# chown -R mysql.mysql keyring
[root@localhost ~]# ll
-rw-r----- 1 mysql mysql 283 Oct 20 16:49 keyring
-rw-r----- 1 mysql mysql 667 Oct 24 11:04 keyring.new
第4步,啟動mysql程序
[root@localhost ~]# /opt/mysql/bin/mysqld_safe --defaults-file=/data/mysql_3306/my_3306.cnf &
第5步,加密表仍存在但查詢資料失敗
mysql> show tables from testdb;
+------------------+
| Tables_in_testdb |
+------------------+
| tde_yes |
+------------------+
mysql> select * from testdb.tde_no;
+------+
| c1 |
+------+
| aaa |
+------+
mysql> select * from testdb.tde_yes;
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.
第6步,殺掉mysql程序,用輪轉後的秘鑰檔案覆蓋,再啟動mysql程序
[root@localhost ~]# ps -ef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9 2> /dev/null
[root@localhost ~]# mv keyring keyring.old
[root@localhost ~]# mv keyring.new keyring
[root@localhost ~]# chown -R mysql.mysql keyring
[root@localhost ~]# /opt/mysql/bin/mysqld_safe --defaults-file=/data/mysql_3306/my_3306.cnf &
第7步,查詢加密表正常
mysql> select * from testdb.tde_yes;
+------+
| c1 |
+------+
| aaa |
| bbb |
+------+
結論:當key不安全時,建議進行秘鑰輪換。輪換後老的秘鑰將立即失效,新的秘鑰一定要妥善儲存。
場景3:模擬mysqldump備份檔案洩漏
第1步,對啟用TDE加密的database(比如testdb)執行mysqldump邏輯備份
mysqldump --single-transaction --master-data=2 --flush-logs --set-gtid-purged=off --triggers --events --routines --skip-tz-utc -uroot -p -S /tmp/mysql_3306.sock --databases testdb > /opt/testdb_2023.sql
第2步,將mysqldump檔案複製到另外2臺mysql伺服器(比如 10.30.3.232及10.30.3.233),模擬mysqldump備份檔案洩漏
scp /opt/testdb_2023.sql 10.30.3.232:/opt/
scp /opt/testdb_2023.sql 10.30.3.233:/opt/
第3步,在未啟用加密外掛的mysql示例(示例10.30.3.232)上,匯入備份檔案報錯且表未建立
mysql> SELECT PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_Library FROM information_schema.plugins WHERE PLUGIN_NAME LIKE 'keyring_file';
Empty set (0.00 sec)
mysql> source /opt/testdb_2023.sql;
Query OK, 0 rows affected (0.00 sec)
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.
Query OK, 0 rows affected (0.00 sec)
ERROR 1146 (42S02): Table 'testdb.tde_yes' doesn't exist
mysql> show tables from testdb;
Empty set (0.00 sec)
第4步,在已啟用加密外掛的mysql示例(示例10.30.3.233)上,匯入備份檔案無報錯
mysql> SELECT PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_Library FROM information_schema.plugins WHERE PLUGIN_NAME LIKE 'keyring_file';
+--------------+---------------+-----------------+
| PLUGIN_NAME | PLUGIN_STATUS | PLUGIN_Library |
+--------------+---------------+-----------------+
| keyring_file | ACTIVE | keyring_file.so |
+--------------+---------------+-----------------+
mysql> source /opt/testdb_2023.sql;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from testdb.tde_yes;
+------+
| c1 |
+------+
| aaa |
| bbb |
+------+
結論:mysqldump備份檔案可以還原到開啟加密外掛的mysql例項上,自動生成master key
場景4:模擬xtrabackup備份檔案洩漏
第1步,所有節點:安裝 xtrabackup 2.4.28
[root@localhost ~]# xtrabackup --version
xtrabackup: recognized server arguments:
xtrabackup version 2.4.28 based on MySQL server 5.7.40 Linux (x86_64) (revision id: 44a8f7b)
第2步,源例項:執行xtrabackup物理備份(注:xtrabackup不會把秘鑰檔案複製到備份目錄)
xtrabackup --defaults-file=/data/mysql_3306/my_3306.cnf --user=root --password=Q8yWuLJ1q_Sth9fA --socket=/tmp/mysql_3306.sock --compress --history --kill-long-queries-timeout=40 --kill-long-query-type=all --tmpdir=/tmp/ --backup --stream=xbstream --slave-info --safe-slave-backup > /opt/xtrabackup_2023.xbstream
第3步,源例項:將xtrabackup檔案複製到目標伺服器(比如 10.30.3.232),模擬xtrabackup備份檔案洩漏
scp /opt/xtrabackup_2023.xbstream 10.30.3.232:/opt/
第4步,目標例項:假設目標伺服器啟用了tde加密外掛,但此秘鑰非彼秘鑰,即備份檔案已洩漏但秘鑰檔案未洩漏
mysql> SELECT PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_Library FROM information_schema.plugins WHERE PLUGIN_NAME LIKE 'keyring_file';
+--------------+---------------+-----------------+
| PLUGIN_NAME | PLUGIN_STATUS | PLUGIN_Library |
+--------------+---------------+-----------------+
| keyring_file | ACTIVE | keyring_file.so |
+--------------+---------------+-----------------+
第5步,目標例項:在目標示例上進行恢復,在 xtrabackup --prepare 階段就報錯了
[root@localhost ~]# rm -r -f /data/mysql_3306/xtra_bak
[root@localhost ~]# mkdir -p /data/mysql_3306/xtra_bak
[root@localhost ~]# xbstream -x < /opt/xtrabackup_2023.xbstream -C /data/mysql_3306/xtra_bak
[root@localhost ~]# xtrabackup --decompress --target-dir=/data/mysql_3306/xtra_bak
[root@localhost ~]# xtrabackup --prepare --target-dir=/data/mysql_3306/xtra_bak
......
InnoDB: Highest supported file format is Barracuda.
InnoDB: Encryption information in datafile: ./testdb/tde_yes.ibd can't be decrypted, please check if a keyring plugin is loaded and initialized successfully.
結論:若沒有源例項的金鑰檔案,無法恢復xtrabackup備份。
附錄:下面是正確的xtrabackup備份及恢復步驟,注意 --keyring-file-data 引數
#.1.源例項:執行xtrabackup備份(指定--keyring-file-data)
xtrabackup --defaults-file=/data/mysql_3306/my_3306.cnf --user=root --password=Q8yWuLJ1q_Sth9fA --socket=/tmp/mysql_3306.sock --compress --history --kill-long-queries-timeout=40 --kill-long-query-type=all --tmpdir=/tmp/ --backup --no-timestamp --stream=xbstream --slave-info --safe-slave-backup --keyring-file-data=/data/mysql_3306/keyring/keyring > /opt/xtrabackup_2023.xbstream
#.2.源例項:將備份檔案和秘鑰複製到目標示例(比如10.30.3.232)
scp /opt/xtrabackup_2023.xbstream 10.30.3.232:/opt/
scp /data/mysql_3306/keyring/keyring 10.30.3.232:/opt/
#.3.目標例項:解壓備份檔案
rm -r -f /data/mysql_3306/xtra_bak
mkdir -p /data/mysql_3306/xtra_bak
xbstream -x < /opt/xtrabackup_2023.xbstream -C /data/mysql_3306/xtra_bak
#.4.目標例項:執行prepare(指定--keyring-file-data)
xtrabackup --decompress --target-dir=/data/mysql_3306/xtra_bak --keyring-file-data=/opt/keyring
xtrabackup --prepare --target-dir=/data/mysql_3306/xtra_bak --keyring-file-data=/opt/keyring
#.5.目標例項:先關掉mysql例項,再改名datadir目錄
ps -ef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9 2> /dev/null
mv /data/mysql_3306/iblog /data/mysql_3306/iblog_$(date +%Y%m%d%H%M%S)
mv /data/mysql_3306/var /data/mysql_3306/var_$(date +%Y%m%d%H%M%S)
#.6.目標例項:執行copy-back(指定--keyring-file-data)
xtrabackup --defaults-file=/data/mysql_3306/my_3306.cnf --copy-back --target-dir=/data/mysql_3306/xtra_bak --keyring-file-data=/opt/keyring
#.7.目標示例:用源例項的金鑰檔案覆蓋,並啟動mysql服務
mv /data/mysql_3306/keyring/keyring /tmp/keyring.$(date +%Y%m%d%H%M%S)
cp /opt/keyring /data/mysql_3306/keyring/keyring
chown -R mysql.mysql /data/mysql_3306
/opt/mysql/bin/mysqld_safe --defaults-file=/data/mysql_3306/my_3306.cnf &
#.8.目標示例:查詢加密表確認一下
mysql> select * from testdb.tde_yes;
+------+
| c1 |
+------+
| aaa |
| bbb |
+------+
遇到的坑:若使用xtrabackup 2.4.13, 即便參考上述步驟對mysql 5.7.42進行備份和恢復都正常,但執行select提示 Table xxx doesn't exist,而使用xtrabackup 2.4.28則備份及恢復正常。
[root@localhost ~]# mysql --version
mysql Ver 14.14 Distrib 5.7.42-45, for Linux (x86_64) using 6.2
[root@localhost ~]# xtrabackup --version
xtrabackup: recognized server arguments:
xtrabackup version 2.4.13 based on MySQL server 5.7.19 Linux (x86_64) (revision id: 3e7ca7c)
常用操作
場景1:假設老業務剛配置了tde加密,有大量的表需要啟用加密,如何批次生成加密指令碼?
mysql> CREATE TABLE testdb.tb2(c1 int);
mysql> CREATE TABLE testdb.tb3(c1 int);
mysql> SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS, CONCAT("ALTER TABLE `",TABLE_SCHEMA,"`.`",table_name,"` ENCRYPTION='Y';") AS enable_tde FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'testdb' AND CREATE_OPTIONS NOT LIKE '%ENCRYPTION%';
+--------------+------------+----------------+--------------------------------------------+
| TABLE_SCHEMA | TABLE_NAME | CREATE_OPTIONS | enable_tde |
+--------------+------------+----------------+--------------------------------------------+
| testdb | tb2 | | ALTER TABLE `testdb`.`tb2` ENCRYPTION='Y'; |
| testdb | tb3 | | ALTER TABLE `testdb`.`tb3` ENCRYPTION='Y'; |
+--------------+------------+----------------+--------------------------------------------+
keyring管理
定時備份:可以固定時間進行備份,需要還原的時候再複製至目標檔案
mkdir -p /root/backup
crontab -l | grep keyring || echo '59 23 * * * /usr/bin/cp /data/mysql_3306/keyring/keyring /root/backup/keyring.$(date +\%Y\%m\%d\%H\%M\%S) >/dev/null 2>&1' >> /var/spool/cron/`whoami`
定時更新:為了考慮安全性,當key不安全時,需要進行更新。更新後原先的表依舊可以正常方案,因為更新置會改變 master encryption key 並重新加密 tablespace keys,不會對錶空間重新加密或解密。
#.主秘鑰輪換
mysql> ALTER INSTANCE ROTATE INNODB MASTER KEY;
務必妥善保管私鑰,確保只有授權的人員可以訪問它。私鑰的洩露將導致資料不再安全。
需要定期更換金鑰,以降低破解的風險。定期更換金鑰可以提高系統的安全性,並且保護資料不會長期處於相同的金鑰下。
如何解除安裝外掛
第1步,確認沒有已加密的資料表,如果存在密文表則建議先解密再解除安裝外掛
mysql> SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE CREATE_OPTIONS LIKE '%ENCRYPTION%';
第2步,對已啟用TDE加密的表執行解密,請執行如下命令:
mysql> alter table testdb.tde_yes encryption='N';
第3步,線上解除安裝keyring_file外掛
mysql> UNINSTALL PLUGIN keyring_file;
第4步,修改配置檔案移除外掛,刪除秘鑰檔案(解除安裝外掛並不會刪除秘鑰檔案),並重啟mysql示例使配置生效
[root@localhost ~]# sed -i '/keyring_file/d' /data/mysql_3306/my_3306.cnf
[root@localhost ~]# cat /data/mysql_3306/my_3306.cnf | egrep "(keyring_file)"
[root@localhost ~]# mv /data/mysql_3306/keyring/keyring /tmp/keyring.delete
[root@localhost ~]# ps -ef | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9 2> /dev/null
[root@localhost ~]# /opt/mysql/bin/mysqld_safe --defaults-file=/data/mysql_3306/my_3306.cnf &
第5步,確認TDE加密已禁用
mysql> SELECT PLUGIN_NAME,PLUGIN_STATUS,PLUGIN_Type,PLUGIN_Library FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring_file';
Empty set (0.00 sec)
參考
MySQL 5.7 - https://dev.mysql.com/doc/refman/5.7/en/keyring.html
MySQL 5.7 - https://dev.mysql.com/doc/refman/5.7/en/innodb-data-encryption.html
Percona - https://docs.percona.com/percona-xtrabackup/2.4/advanced/encrypted_innodb_tablespace_backups.html
阿里雲-設定透明資料加密功能:https://help.aliyun.com/zh/rds/apsaradb-rds-for-mysql/configure-tde-for-an-apsaradb-rds-for-mysql-instance?spm=a2c4g.11186623.0.i35
華為雲-開啟透明資料加密功能:https://support.huaweicloud.com/usermanual-rds/rds_05_0031.html