文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
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_id, user_id:以 null 字元結尾的字串,它們成對形成一個要移除的金鑰的唯一識別符。

    傳回值

    成功時傳回 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_id, user_id:以 null 字元結尾的字串,它們成對形成一個要儲存的金鑰的唯一識別符。

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

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

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

    傳回值

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