Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

7.6.9.2 密钥环服务

MySQL 服务器支持密钥环服务,启用内部组件和插件安全地存储敏感信息以供后续检索。 MySQL 发行版提供了一个可在两个级别访问的密钥环接口:

  • 在 SQL 级别上,以一组可加载函数的形式,每个函数映射到服务例程的调用。

  • 作为 C 语言接口,从服务器插件或可加载函数中可调用插件服务。

本节描述如何使用密钥环服务函数来存储、检索和删除密钥环密钥库中的密钥。有关使用函数的 SQL 接口信息,请参阅 第 8.4.4.15 节,“通用密钥环密钥管理函数”。有关一般密钥环信息,请参阅 第 8.4.4 节,“MySQL 密钥环”

密钥环服务使用启用的任何基础密钥环插件。如果没有启用密钥环插件,密钥环服务调用将失败。

密钥库中的一个“记录”由数据(密钥本身)和一个唯一标识符组成,通过该标识符可以访问密钥。该标识符有两个部分:

  • key_id:密钥 ID 或名称。key_id 值以 mysql_ 开头的值由 MySQL 服务器保留。

  • user_id:会话有效用户 ID。如果没有用户上下文,该值可以为 NULL。该值不一定是实际的“用户”;其含义取决于应用程序。

    实现密钥环函数接口的函数将 CURRENT_USER() 的值作为 user_id 值传递给密钥环服务函数。

密钥环服务函数具有以下共同特征:

  • 每个函数返回 0 表示成功,1 表示失败。

  • key_iduser_id 参数形成一个唯一的组合,指示密钥环中要使用的密钥。

  • key_type 参数提供了关于密钥的附加信息,例如其加密方法或预期用途。

  • 密钥环服务函数将密钥 ID、用户名、类型和值视为二进制字符串,因此比较是区分大小写的。例如,ID MyKeymykey 引用不同的密钥。

以下是可用的密钥环服务函数:

  • 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_id, user_id:形成唯一标识符的 null 终止字符串,指示要检索的密钥。

    • key_type:指向 null 终止字符串的缓冲区指针,该字符串提供了关于密钥的附加信息(在添加密钥时存储)。

    • key:指向缓冲区指针,该缓冲区包含检索的密钥数据。

    • key_len:变量的地址,该变量存储 *key 缓冲区的大小(以字节为单位)。

    返回值:

    返回 0 表示成功,1 表示失败。

  • my_key_generate()

    生成一个新的随机密钥,并将其存储在密钥环中。该密钥的长度为 key_len,并与 key_iduser_id 组成的标识符相关联。类型和长度值必须与基础密钥环插件支持的值一致。请参阅 第 8.4.4.13 节,“支持的密钥环密钥类型和长度”

    语法:

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

    参数:

    • key_id, user_id:形成唯一标识符的 null 终止字符串,指示要生成的密钥。

    • key_type:提供关于密钥的附加信息的 null 终止字符串。

    • 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。