文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (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_id, user_id: 作为一对形成唯一标识符的以 null 结尾的字符串,指示要获取的哪个密钥。

    • key_type: 缓冲区指针的地址。该函数将指针存储到其中,该指针指向一个以 null 结尾的字符串,该字符串提供有关密钥的附加信息(在添加密钥时存储)。

    • 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_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_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: 提供有关密钥的附加信息的以 null 结尾的字符串。

    • key: 包含要存储的密钥数据的缓冲区。

    • key_len: key 缓冲区的大小(以字节为单位)。

    返回值

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