金鑰環服務取用者需要安裝金鑰環元件或外掛程式
若要使用金鑰環元件,請從此處的說明開始。
若要改用金鑰環外掛程式,請從第 8.4.4.3 節「金鑰環外掛程式安裝」開始。
如果您打算將金鑰環功能與所選的金鑰環元件或外掛程式結合使用,請在使用第 8.4.4.12 節「通用金鑰環金鑰管理功能」中的說明安裝該元件或外掛程式後,再安裝這些功能。
一次只能啟用一個金鑰環元件或外掛程式。不支援啟用多個金鑰環元件或外掛程式,且結果可能不如預期。
MySQL 提供以下金鑰環元件選擇
component_keyring_file
:將金鑰環資料儲存在伺服器主機本機的檔案中。適用於 MySQL Community Edition 和 MySQL Enterprise Edition 發行版本。component_keyring_encrypted_file
:將金鑰環資料儲存在伺服器主機本機的加密、受密碼保護的檔案中。適用於 MySQL Enterprise Edition 發行版本。component_keyring_oci
:將金鑰環資料儲存在 Oracle Cloud Infrastructure Vault 中。適用於 MySQL Enterprise Edition 發行版本。
若要讓伺服器可使用,元件程式庫檔案必須位於 MySQL 外掛程式目錄(由 plugin_dir
系統變數命名的目錄)中。如有必要,請透過在伺服器啟動時設定 plugin_dir
的值來設定外掛程式目錄位置。
金鑰環元件或外掛程式必須在伺服器啟動順序的早期載入,以便其他元件可以在自己的初始化期間根據需要存取它。例如,InnoDB
儲存引擎會使用金鑰環進行表格空間加密,因此必須在 InnoDB
初始化之前載入並可使用金鑰環元件或外掛程式。
如果您需要支援持久性系統變數值的安全儲存,則必須在 MySQL 伺服器實例上啟用金鑰環元件。金鑰環外掛程式不支援此功能。請參閱持久化敏感系統變數。
與金鑰環外掛程式不同,金鑰環元件不會使用 --early-plugin-load
伺服器選項載入,也不會使用系統變數進行設定。相反地,伺服器會在啟動期間使用資訊清單來判斷要載入哪個金鑰環元件,而載入的元件會在初始化時查詢其自身的設定檔。因此,若要安裝金鑰環元件,您必須
撰寫一個資訊清單,告知伺服器要載入哪個金鑰環元件。
為該金鑰環元件撰寫設定檔。
安裝金鑰環元件的第一步是撰寫一個資訊清單,指出要載入哪個元件。在啟動期間,伺服器會讀取全域資訊清單檔案,或是全域資訊清單檔案搭配本機資訊清單檔案。
伺服器會嘗試從伺服器安裝的目錄中讀取其全域資訊清單檔案。
如果全域資訊清單檔案指出使用本機資訊清單檔案,則伺服器會嘗試從資料目錄中讀取其本機資訊清單檔案。
雖然全域和本機資訊清單檔案位於不同的目錄中,但兩個位置中的檔案名稱都是
mysqld.my
。資訊清單檔案不存在並非錯誤。在這種情況下,伺服器不會嘗試與該檔案相關聯的元件載入。
本機資訊清單檔案允許為伺服器的多個實例設定元件載入,使每個伺服器實例的載入指示特定於給定的資料目錄實例。這使得不同的 MySQL 實例可以使用不同的金鑰環元件。
伺服器資訊清單檔案具有以下屬性
資訊清單檔案必須為有效的 JSON 格式。
資訊清單檔案允許以下項目
"read_local_manifest"
:此項目僅允許在全域資訊清單檔案中使用。如果該項目不存在,則伺服器僅使用全域資訊清單檔案。如果該項目存在,則其值為true
或false
,表示伺服器是否應從本機資訊清單檔案讀取元件載入資訊。如果全域資訊清單檔案中存在
"read_local_manifest"
項目以及其他項目,則伺服器會先檢查"read_local_manifest"
項目值。如果值為
false
,則伺服器會處理全域資訊清單檔案中的其他項目,並忽略本機資訊清單檔案。如果值為
true
,則伺服器會忽略全域資訊清單檔案中的其他項目,並嘗試讀取本機資訊清單檔案。
"components"
:此項目指示要載入哪個元件。該項目值是一個字串,指定有效的元件 URN,例如"file://component_keyring_file"
。元件 URN 以file://
開頭,並表示位於 MySQL 外掛程式目錄中實作該元件的程式庫檔案的基底名稱。
伺服器對資訊清單檔案的存取應該是唯讀的。例如,
mysqld.my
伺服器資訊清單檔案可能由root
擁有,並對root
具有讀/寫權限,但對於用於執行 MySQL 伺服器的帳戶,應該是唯讀的。如果在啟動期間發現資訊清單檔案對該帳戶具有讀/寫權限,則伺服器會在錯誤日誌中寫入警告,建議將該檔案設為唯讀。資料庫管理員有責任建立要使用的任何資訊清單檔案,並確保其存取模式和內容正確。如果發生錯誤,伺服器啟動會失敗,且管理員必須修正伺服器錯誤日誌中指示的任何問題。
根據前面的資訊清單檔案屬性,若要設定伺服器載入 component_keyring_file
,請在 mysqld 安裝目錄中建立名為 mysqld.my
的全域資訊清單檔案,並選擇性地在資料目錄中建立名為 mysqld.my
的本機資訊清單檔案。以下指示說明如何載入 component_keyring_file
。若要載入不同的金鑰環元件,請將其名稱取代為 component_keyring_file
。
完成資訊清單的設定後,繼續設定金鑰環元件。若要執行此操作,請查看您選擇的金鑰環元件的注意事項,以取得特定於該元件的設定指示。
component_keyring_file
:第 8.4.4.4 節,「使用 component_keyring_file 基於檔案的金鑰環元件」。component_keyring_encrypted_file
:第 8.4.4.5 節,「使用 component_keyring_encrypted_file 加密基於檔案的金鑰環元件」。component_keyring_oci
:第 8.4.4.9 節,「使用 Oracle Cloud Infrastructure Vault 金鑰環元件」。
在執行任何元件特定的設定後,啟動伺服器。透過檢查效能結構描述 keyring_component_status
表格,驗證元件安裝。
mysql> SELECT * FROM performance_schema.keyring_component_status;
+---------------------+-------------------------------------------------+
| STATUS_KEY | STATUS_VALUE |
+---------------------+-------------------------------------------------+
| Component_name | component_keyring_file |
| Author | Oracle Corporation |
| License | GPL |
| Implementation_name | component_keyring_file |
| Version | 1.0 |
| Component_status | Active |
| Data_file | /usr/local/mysql/keyring/component_keyring_file |
| Read_only | No |
+---------------------+-------------------------------------------------+
Component_status
的值為 Active
表示元件已成功初始化。
如果元件無法載入,伺服器啟動會失敗。請檢查伺服器錯誤日誌以取得診斷訊息。如果元件載入但由於設定問題而無法初始化,伺服器會啟動,但 Component_status
的值為 Disabled
。請檢查伺服器錯誤日誌,修正設定問題,並使用 ALTER INSTANCE RELOAD KEYRING
陳述式重新載入設定。
金鑰環元件應僅使用資訊清單檔案載入,而不是使用 INSTALL COMPONENT
陳述式載入。使用該陳述式載入的金鑰環元件可能會在伺服器啟動順序中太晚才可供某些使用金鑰環的元件(例如 InnoDB
)使用,因為它們已在 mysql.component
系統表格中註冊,並在後續的伺服器重新啟動時自動載入。但是 mysql.component
是一個 InnoDB
表格,因此只有在 InnoDB
初始化後,才能在啟動期間載入其中命名的任何元件。
如果當元件嘗試存取金鑰環服務時沒有可用的金鑰環元件或外掛程式,則該元件無法使用該服務。因此,元件可能無法初始化,或者可能以有限的功能初始化。例如,如果 InnoDB
在初始化時發現存在加密的表空間,則它會嘗試存取金鑰環。如果金鑰環不可用,則 InnoDB
只能存取未加密的表空間。