標籤:text 完全 cal taf open search chown usr creat
目錄
- 一. 簡介
- 二. 配置
- 三. 使用
- 四. 限制
- 五. 還原測試
- 六. 效能測試
- 七.秘鑰備份
- 八.參考文獻
一. 簡介
MySQL 5.7之後支援通過mysql keyring(一種兩層加密架構,由一個master key和多個tablespace key組成;當InnoDB表被加密的時候,其實是對tablespace key加密並儲存在資料表空間檔案頭裡,當訪問被加密的InnoDB表的時候,InnoDB使用master key進行解密)對獨立資料表空間中的InnoDB表的資料進行加密,來提升物理檔案的安全性。
【企業版與非企業版外掛程式區別
】
MySQL Enterprise Edition
offers the keyring_okv plugin,When InnoDB tablespace encryption uses OKV for encryption key management
, the feature is referred to as “MySQL Enterprise Transparent Data Encryption (TDE)
”.
non-enterprise editions of MySQL
uses the keyring_file plugin
for encryption key management.
【加密方式為AES
】
InnoDB tablespace encryption supports the Advanced Encryption Standard (AES) block-based encryption algorithm
【加密鍵
】
tablespace key
master key rotation
Only one keyring plugin should be enabled at a time. Enabling multiple keyring plugins is not supported.
二. 配置
- MySQL 5.7.11之後,所有版本包含keyring_file外掛程式
- MySQL 5.7.12之後,企業版包含keyring_okv外掛程式
- MySQL 5.7.13之後,所有版本包含key管理的SQL介面(UDF,使用者定義函數)
【設定檔
】 在my.cnf裡添加2行
early-plugin-load=keyring_file.so
keyring_file_data=/usr/local/mysql/keyring/keyring
【添加目錄
】
Linux > mkdir -p /usr/local/mysql/keyring
Linux > chown -R mysql:mysql /usr/local/mysql/keyring/
Linux > chmod 750 /usr/local/mysql/keyring/
【安裝外掛程式
】
mysql> INSTALL PLUGIN keyring_file soname ‘keyring_file.so‘;
【卸載外掛程式
】 忽略
mysql > UNINSTALL PLUGIN keyring_file;
【秘鑰備份
】
Linux > mkdir /root/backup
Linux > cp /usr/local/mysql/keyring/keyring /root/backup
【外掛程式檢查
】
mysql > show plugins ; 查看外掛程式是否啟用
【旋轉主加密金鑰
】
mysql > ALTER INSTANCE ROTATE INNODB MASTER KEY;
三. 使用
【加密表建立
】
CREATE TABLE t1 (c1 INT) ENCRYPTION=‘Y‘;
【查看所有加密表
】
select * from information_schema.tables where create_options like ‘%ENCRYPTION%="y"%‘;
【修改表加密
】
ALTER TABLE t1 ENCRYPTION=‘Y‘;
ALTER TABLE t1 ENCRYPTION=‘N‘;
【查看秘鑰
】
show variables like ‘%keyring%‘;
四. 限制
InnoDB資料表空間加密限制
進階加密標準(AES)是唯一支援的密碼編譯演算法
。 InnoDB資料表空間加密為資料表空間祕密金鑰加密和密碼分組連結(CBC)塊加密模式使用電子密碼本(ECB)塊加密模式進行資料加密。
支援改變表的ENCRYPTION屬性ALGORITHM = COPY操作。 ALGORITHM = INPLACE不支援。
InnoDB資料表空間加密僅支援儲存在單獨資料表空間的InnoDB表。儲存在其他InnoDB資料表空間類型(包括常規資料表空間,系統資料表空間,撤消日誌資料表空間和暫存資料表空間)中的表不支援加密。
無法將加密表從單獨資料表空間移動或複製到不支援的InnoDB資料表空間類型。
資料表空間加密僅適用於資料表空間中的資料。資料在重做日誌
,撤消日誌
或二進位日誌中
不加密。
直接從keyring_file外掛程式
遷移到keyring_okv外掛程式
目前不受支援。更改密鑰環外掛程式需要解密表,卸載當前的密鑰環外掛程式,安裝和配置其他密鑰環外掛程式,並重新加密表。
五. 還原測試
備忘:發現master key線上刪除後,加密表還是可以訪問,所以猜測,每次mysql啟動時候會調用master key對加密表進行解密,而不是即時解密,實際通過觀察errorlog中啟動流程發現確實如此。
【mysqldump
】 備份檔案可以還原到開啟加密外掛程式的mysql執行個體上,會自動產生master key
【xtranbackup
】在沒有master key的情況下,不可以開啟加密表,可以開啟非加密表。
【物理備份
】 在沒有master key的情況下,不可以開啟加密表,可以開啟非加密表。
【物理備份
】 在有master key的情況下,可以開啟加密表。
[ERROR] InnoDB: Encryption can‘t find master key, please check the keyring plugin is loaded.[ERROR] InnoDB: Encryption information in datafile: ./test/emp.ibd can‘t be decrypted , please confirm the keyfile is match and keyring plugin is loaded.
【丟失master key 或 master key錯誤
】
[ERROR] InnoDB: Encryption information in datafile: ./test/emp.ibd can‘t be decrypted , please confirm the keyfile is match and keyring plugin is loaded.[Warning] InnoDB: Ignoring tablespace `test/emp` because it could not be opened.
六. 效能測試
實驗環境:
5.7.19-log MySQL Community Server
實驗目的:
驗證資料表空間加密和正常資料表空間對SQL語句的效能影響
實驗步驟:
- 複製兩張表到測試MySQL中
- 一張表加密,另外一張表不加密
- 使用mysqlslap分別對select、update、insert語句進行測試
實驗結果:
SQL類型 |
select |
update |
insert |
非加密表 |
8.762秒 |
32.447秒 |
24.064秒 |
加密表 |
8.899秒 |
32.505秒 |
26.154秒 |
結論:
官方提供的資料是加密表大約影響5%
左右的效能,我們測試下來對SQL的效能加密表和非加密表影響不大,完全可以滿足公司需要。
七.秘鑰備份
秘鑰在MySQL執行個體啟動時需要對加密資料表空間進行解密,如果秘鑰丟失可能會導致無法開啟加密資料表空間,造成資料丟失,所以秘鑰是很重要的檔案。
正式項目需要考慮秘鑰異機備份事宜,將keyring_file_data
參數對應的秘鑰目錄下所有檔案進行複製。
八.參考文獻
https://zhuanlan.zhihu.com/p/29761390
https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html
http://www.dbsec.cn/research/research/20170802.html
MySQL 5.7 TDE