Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


7.6.9.2 Keyring 服务

MySQL Server 支持一个 keyring 服务,允许内部组件和插件安全地存储敏感信息,以便后续检索。MySQL 发布版提供了一个 keyring 接口,可以在两个级别上访问:

  • 在 SQL 级别上,作为一组可加载的函数,每个函数都映射到对服务程序的调用。

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

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

keyring 服务使用启用的任何 underlying keyring 插件,如果没有启用插件,keyring 服务调用将失败。

keystore 中的一个record由数据(密钥本身)和唯一标识符组成,该标识符用于访问密钥。标识符有两个部分:

  • key_id: 密钥 ID 或名称。key_id值以mysql_开头是 MySQL Server 保留的。

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

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

密钥ring服务函数共享以下特征:

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

  • key_iduser_id参数组成一个唯一的组合,指示要使用的密钥在密钥ring中的位置。

  • key_type参数提供关于密钥的额外信息,例如加密方法或用途。

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

这些密钥ring服务函数可用:

  • my_key_fetch()

    将密钥从密钥ring中解密并检索,包括其类型。该函数分配用于存储返回的密钥和密钥类型的缓冲区内存。调用者应在不再需要时将内存设置为零或混淆,然后释放它。

    语法:

    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: 缓冲区指针的地址。函数将在其中存储一个指向null-terminated字符串的指针,该字符串提供关于密钥(在添加密钥时存储)的额外信息。

    • key: 缓冲指针的地址。函数将缓冲区包含的键数据的指针存储到其中。

    • key_len: 函数将*key缓冲区的大小(以字节为单位)存储到其中的变量地址。

    返回值:

    成功时返回0,失败时返回1。

  • my_key_generate()

    生成一个给定类型和长度的新随机键,并将其存储到密钥ring中。该键的长度为key_len,与由key_iduser_id组成的标识符相关联。类型和长度值必须与 underlying keyring 插件支持的值一致。请参阅第8.4.4.10节,“Supported Keyring Key Types and Lengths”

    语法:

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

    参数:

    • key_id, user_id: 为空终止的字符串对,组成键生成的唯一标识符。

    • key_type: 为空终止的字符串,为键提供额外信息。

    • key_len: 键生成的大小(以字节为单位)。

    返回值:

    成功时返回0,失败时返回1。

  • my_key_remove()

    从密钥ring中删除一个键。

    语法:

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

    参数:

    • key_id, user_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_len: key 缓冲区的大小(以字节为单位)。

    返回值:

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