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_id
和user_id
参数形成一个唯一的组合,指示在密钥环中使用哪个密钥。 -
key_type
参数提供有关密钥的其他信息,例如其加密方法或预期用途。 -
密钥环服务功能将密钥 ID,用户名,类型和值视为二进制字符串,因此比较区分大小写。例如,ID
MyKey
和mykey
引用不同的键。
这些密钥环服务功能可用:
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_id
,user_id
:空对的字符串组成一对,形成唯一的标识符,指示要提取的密钥。-
key_type
:缓冲区指针的地址。该函数将指向空终止字符串的指针存储在该指针中,该字符串提供有关密钥的其他信息(添加密钥时存储)。 -
key
:缓冲区指针的地址。该函数在其中存储指向包含已提取密钥数据的缓冲区的指针。 -
key_len
:函数将大小存储在*key
缓冲区的字节中的变量的地址。
-
Return value:
返回 0table 示成功,返回 1table 示失败。
my_key_generate()
生成给定类型和长度的新随机密钥,并将其存储在密钥环中。密钥的长度为key_len
,并且与由key_id
和user_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_id
,user_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_id
,user_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_id
,user_id
:空对的字符串,成对形成要存储的密钥的唯一标识符。-
key_type
:一个以 null 结束的字符串,提供有关密钥的其他信息。 -
key
:包含要存储的密钥数据的缓冲区。 -
key_len
:key
缓冲区的大小(以字节为单位)。
-
Return value:
返回 0table 示成功,返回 1table 示失败。