文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


7.6.9.2 金鑰環服務

MySQL 伺服器支援金鑰環服務,讓內部元件和外掛程式能夠安全地儲存敏感資訊,以便稍後擷取。MySQL 發行版本提供可從兩個層級存取的金鑰環介面

  • 在 SQL 層級,作為一組可載入函數,每個函數都對應到對服務常式的呼叫。

  • 作為 C 語言介面,可作為伺服器外掛程式或可載入函數的外掛程式服務呼叫。

本節說明如何使用金鑰環服務函數在 MySQL 金鑰環金鑰儲存區中儲存、擷取和移除金鑰。如需有關使用函數的 SQL 介面資訊,請參閱第 8.4.4.12 節「通用金鑰環金鑰管理函數」。如需一般金鑰環資訊,請參閱第 8.4.4 節「MySQL 金鑰環」

金鑰環服務使用任何已啟用的基礎金鑰環外掛程式 (如果有的話)。如果未啟用任何金鑰環外掛程式,金鑰環服務呼叫會失敗。

金鑰儲存區中的記錄包含資料 (金鑰本身) 和用於存取金鑰的唯一識別碼。識別碼有兩個部分

  • key_id:金鑰 ID 或名稱。以 mysql_ 開頭的 key_id 值由 MySQL 伺服器保留。

  • user_id:工作階段有效使用者 ID。如果沒有使用者內容,此值可以是 NULL。該值實際上不必是使用者;其含義取決於應用程式。

    實作金鑰環函數介面的函數會將 CURRENT_USER() 的值作為 user_id 值傳遞給金鑰環服務函數。

金鑰環服務函數具有下列共同特性

  • 每個函數成功傳回 0,失敗傳回 1。

  • key_iduser_id 引數形成唯一的組合,表示要使用金鑰環中的哪個金鑰。

  • key_type 引數提供有關金鑰的其他資訊,例如其加密方法或預期用途。

  • 金鑰環服務函數將金鑰 ID、使用者名稱、類型和值視為二進位字串,因此比較會區分大小寫。例如,MyKeymykey 的 ID 是指不同的金鑰。

可以使用下列金鑰環服務函數

  • my_key_fetch()

    從金鑰環中解混淆並擷取金鑰及其類型。該函數會配置用於儲存傳回的金鑰和金鑰類型的緩衝區記憶體。呼叫者在不再需要時應將記憶體歸零或混淆,然後釋放它。

    語法

    bool my_key_fetch(const char *key_id, const char **key_type,
                      const char* user_id, void **key, size_t *key_len)

    引數

    • key_iduser_id:以空字元結尾的字串,成對形成唯一識別碼,表示要擷取的金鑰。

    • key_type:緩衝區指標的位址。該函數會將一個指標儲存到其中,此指標指向以空字元結尾的字串,提供有關金鑰的其他資訊 (在新增金鑰時儲存)。

    • key:緩衝區指標的位址。該函數會將一個指標儲存到其中,此指標指向包含擷取的金鑰資料的緩衝區。

    • key_len:變數的位址,函數會將 *key 緩衝區的大小 (以位元組為單位) 儲存到其中。

    傳回值

    成功傳回 0,失敗傳回 1。

  • my_key_generate()

    產生給定類型和長度的新隨機金鑰,並將其儲存在金鑰環中。金鑰的長度為 key_len,並與由 key_iduser_id 組成的識別碼相關聯。類型和長度值必須與基礎金鑰環外掛程式支援的值一致。請參閱第 8.4.4.10 節「支援的金鑰環金鑰類型和長度」

    語法

    bool my_key_generate(const char *key_id, const char *key_type,
                         const char *user_id, size_t key_len)

    引數

    • key_iduser_id:以空字元結尾的字串,成對形成要產生之金鑰的唯一識別碼。

    • key_type:以空字元結尾的字串,提供有關金鑰的其他資訊。

    • key_len:要產生之金鑰的大小 (以位元組為單位)。

    傳回值

    成功傳回 0,失敗傳回 1。

  • my_key_remove()

    從金鑰環中移除金鑰。

    語法

    bool my_key_remove(const char *key_id, const char* user_id)

    引數

    • key_iduser_id:以空字元結尾的字串,成對組合構成要移除的金鑰的唯一識別碼。

    傳回值

    成功傳回 0,失敗傳回 1。

  • my_key_store()

    對金鑰進行混淆處理並將其儲存在金鑰環中。

    語法

    bool my_key_store(const char *key_id, const char *key_type,
                      const char* user_id, void *key, size_t key_len)

    引數

    • key_iduser_id:以空字元結尾的字串,成對組合構成要儲存的金鑰的唯一識別碼。

    • key_type:以空字元結尾的字串,提供有關金鑰的其他資訊。

    • key:包含要儲存的金鑰資料的緩衝區。

    • key_lenkey 緩衝區的大小(以位元組為單位)。

    傳回值

    成功傳回 0,失敗傳回 1。