28.3.2 钥匙圈服务

MySQL Server 支持密钥环服务,该服务使内部服务器组件和插件能够安全地存储敏感信息,以便以后检索。本节介绍如何使用密钥环服务功能来存储,检索和删除 MySQL 密钥环密钥库中的密钥。密钥环服务功能的 SQL 接口也可以作为一组用户定义的功能(UDF)使用。参见第 6.4.4.8 节“通用密钥环密钥 Management 功能”。有关常规密钥环的信息,请参见第 6.4.4 节“ MySQL 密钥环”

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

密钥库中的“记录”由数据(密钥本身)和用于访问密钥的唯一标识符组成。标识符分为两部分:

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

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

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

密钥环服务功能具有以下共同 Feature:

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

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

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

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

这些密钥环服务功能可用:

  • my_key_fetch()

对密钥环及其类型进行反混淆和检索。该函数为用于存储返回的键和键类型的缓冲区分配内存。当不再需要内存时,调用者应将其清零或混淆,然后释放它。

Syntax:

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

Arguments:

  • key_iduser_id:空对的字符串组成一对,形成唯一的标识符,指示要提取的密钥。

    • key_type:缓冲区指针的地址。该函数将指向空终止字符串的指针存储在该指针中,该字符串提供有关密钥的其他信息(添加密钥时存储)。

    • key:缓冲区指针的地址。该函数在其中存储指向包含已提取密钥数据的缓冲区的指针。

    • key_len:函数将大小存储在*key缓冲区的字节中的变量的地址。

Return value:

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

  • my_key_generate()

生成给定类型和长度的新随机密钥,并将其存储在密钥环中。密钥的长度为key_len,并且与由key_iduser_id形成的标识符关联。类型和长度值必须与基础密钥环插件支持的值一致。参见第 6.4.4.6 节“支持的密钥环密钥类型和长度”

Syntax:

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

Arguments:

  • key_iduser_id:空对的字符串,成对形成要生成的密钥的唯一标识符。

    • key_type:一个以 null 结束的字符串,提供有关密钥的其他信息。

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

Return value:

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

  • my_key_remove()

从钥匙圈中删除钥匙。

Syntax:

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

Arguments:

  • key_iduser_id:空对的字符串,成对形成要删除的密钥的唯一标识符。

Return value:

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

  • my_key_store()

混淆密钥并将其存储在密钥环中。

Syntax:

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

Arguments:

  • key_iduser_id:空对的字符串,成对形成要存储的密钥的唯一标识符。

    • key_type:一个以 null 结束的字符串,提供有关密钥的其他信息。

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

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

Return value:

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