金鑰環服務取用者需要安裝金鑰環元件或外掛程式
若要使用金鑰環元件,請從此處的指示開始。
若要改為使用金鑰環外掛程式,請從章節 8.4.4.3,「金鑰環外掛程式安裝」開始。
如果您打算將金鑰環函式與選擇的金鑰環元件或外掛程式一起使用,請在使用章節 8.4.4.12,「一般用途金鑰環金鑰管理函式」中的指示安裝該元件或外掛程式之後,安裝這些函式。
一次只能啟用一個金鑰環元件或外掛程式。不支援啟用多個金鑰環元件或外掛程式,而且結果可能不如預期。
MySQL 提供這些金鑰環元件選擇
component_keyring_file
:將金鑰環資料儲存在伺服器主機本機的檔案中。適用於 MySQL 社群版和 MySQL 企業版發行版本。component_keyring_encrypted_file
:將金鑰環資料儲存在伺服器主機本機的加密、受密碼保護的檔案中。適用於 MySQL 企業版發行版本。component_keyring_oci
:將金鑰環資料儲存在 Oracle Cloud Infrastructure Vault 中。適用於 MySQL 企業版發行版本。
為了讓伺服器可以使用元件,元件程式庫檔案必須位於 MySQL 外掛程式目錄中(由plugin_dir
系統變數命名的目錄)。如有必要,請在伺服器啟動時設定plugin_dir
的值,以設定外掛程式目錄位置。
金鑰環元件或外掛程式必須在伺服器啟動順序中提早載入,以便其他元件可以在它們自己的初始化期間視需要存取它。例如,InnoDB
儲存引擎會使用金鑰環進行資料表空間加密,因此必須在 InnoDB
初始化之前載入並提供金鑰環元件或外掛程式。
如果需要支援用於保存的系統變數值的安全儲存,則必須在 MySQL 伺服器執行個體上啟用金鑰環元件。金鑰環外掛程式不支援此功能。請參閱保存敏感系統變數。
與金鑰環外掛程式不同,金鑰環組件不是使用 --early-plugin-load
伺服器選項載入,也不是使用系統變數設定。相反地,伺服器在啟動時會使用一份 manifest 來決定要載入哪個金鑰環組件,而載入的組件在初始化時會參考自己的設定檔。因此,要安裝金鑰環組件,您必須
撰寫一份 manifest,告訴伺服器要載入哪個金鑰環組件。
為該金鑰環組件撰寫一份設定檔。
安裝金鑰環組件的第一步是撰寫一份 manifest,指出要載入哪個組件。在啟動期間,伺服器會讀取全域 manifest 檔案,或是與本機 manifest 檔案配對的全域 manifest 檔案。
伺服器會嘗試從伺服器安裝所在的目錄讀取其全域 manifest 檔案。
如果全域 manifest 檔案指示要使用本機 manifest 檔案,伺服器會嘗試從資料目錄讀取其本機 manifest 檔案。
雖然全域和本機 manifest 檔案位於不同的目錄中,但兩個位置的檔案名稱都是
mysqld.my
。如果 manifest 檔案不存在,並不是錯誤。在這種情況下,伺服器不會嘗試載入與該檔案相關的組件。
本機 manifest 檔案允許設定多個伺服器執行個體的組件載入,使每個伺服器執行個體的載入指示都特定於給定的資料目錄執行個體。這讓不同的 MySQL 執行個體可以使用不同的金鑰環組件。
伺服器 manifest 檔案具有以下特性
manifest 檔案必須是有效的 JSON 格式。
manifest 檔案允許以下項目
"read_local_manifest"
:此項目僅允許在全域 manifest 檔案中使用。如果該項目不存在,伺服器只會使用全域 manifest 檔案。如果該項目存在,其值為true
或false
,表示伺服器是否應從本機 manifest 檔案讀取組件載入資訊。如果
"read_local_manifest"
項目與其他項目一起出現在全域 manifest 檔案中,伺服器會先檢查"read_local_manifest"
項目值。如果值為
false
,伺服器會處理全域 manifest 檔案中的其他項目,並忽略本機 manifest 檔案。如果值為
true
,伺服器會忽略全域 manifest 檔案中的其他項目,並嘗試讀取本機 manifest 檔案。
"components"
:此項目表示要載入哪個組件。該項目值是一個字串,指定有效的組件 URN,例如"file://component_keyring_file"
。組件 URN 以file://
開頭,並表示位於 MySQL 外掛程式目錄中實作該組件的程式庫檔案的基本名稱。
伺服器對 manifest 檔案的存取權限應為唯讀。例如,
mysqld.my
伺服器 manifest 檔案可能由root
擁有,並且對root
具有讀/寫權限,但對用於執行 MySQL 伺服器的帳戶應為唯讀。如果在啟動期間發現 manifest 檔案對該帳戶具有讀/寫權限,伺服器會將警告寫入錯誤日誌,建議將該檔案設為唯讀。資料庫管理員有責任建立要使用的任何 manifest 檔案,並確保其存取模式和內容正確。如果發生錯誤,伺服器啟動會失敗,管理員必須修正伺服器錯誤日誌中指示的任何問題。
鑑於上述 manifest 檔案特性,要設定伺服器載入 component_keyring_file
,請在 mysqld 安裝目錄中建立一個名為 mysqld.my
的全域 manifest 檔案,並且選擇性地在資料目錄中建立一個也名為 mysqld.my
的本機 manifest 檔案。以下說明描述如何載入 component_keyring_file
。要載入不同的金鑰環組件,請將其名稱替換為 component_keyring_file
。
設定好 manifest 後,請繼續設定金鑰環組件。為此,請查看您選擇的金鑰環組件的說明,以取得該組件特定的設定指示。
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 金鑰環組件〉。
在執行任何組件特定的設定後,啟動伺服器。透過檢查 Performance Schema 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
陳述式重新載入設定。
金鑰環組件應僅使用 manifest 檔案載入,而非使用 INSTALL COMPONENT
陳述式。使用該陳述式載入的金鑰環組件在某些使用金鑰環的組件(例如 InnoDB
)的伺服器啟動序列中可能過晚才可用,因為它們是在 mysql.component
系統表格中註冊,並在後續伺服器重新啟動時自動載入。但是 mysql.component
是一個 InnoDB
表格,因此其中命名的任何組件都只能在 InnoDB
初始化後才能在啟動期間載入。
如果當組件嘗試存取金鑰環服務時,沒有可用的金鑰環組件或外掛程式,則該組件無法使用該服務。因此,該組件可能無法初始化,或者可能以有限的功能初始化。例如,如果 InnoDB
在初始化時發現存在加密的表格空間,它會嘗試存取金鑰環。如果金鑰環不可用,InnoDB
只能存取未加密的表格空間。