MySQL 服务器支持密钥环服务,使内部组件和插件能够安全地存储敏感信息以供以后检索。MySQL 发行版提供了一个可在两个级别访问的密钥环接口:
在 SQL 级别,作为一组可加载函数,每个函数都映射到对服务例程的调用。
作为 C 语言接口,可作为服务器插件或可加载函数的插件服务调用。
本节介绍如何使用密钥环服务功能在 MySQL 密钥环密钥库中存储、检索和删除密钥。有关使用函数的 SQL 接口的信息,请参阅第 6.4.4.15 节,“通用密钥环密钥管理函数”。有关一般密钥环信息,请参阅第 6.4.4 节,“MySQL 密钥环”。
密钥环服务使用启用的任何底层密钥环插件(如果有的话)。如果没有启用密钥环插件,密钥环服务调用将失败。
密钥库中的“记录”由数据(密钥本身)和访问密钥的唯一标识符组成。标识符有两部分:
key_id
:密钥 ID 或名称。key_id
开头的值mysql_
由 MySQL 服务器保留。user_id
:会话有效用户ID。如果没有用户上下文,这个值可以是NULL
。该值实际上不必是 “用户”;含义取决于应用程序。实现密钥环函数接口的函数将值
CURRENT_USER()
作为user_id
值传递给密钥环服务函数。
密钥环服务函数具有以下共同特征:
每个函数返回 0 表示成功,1 表示失败。
key_id
和参数形成一个唯一 的user_id
组合,指示要使用密钥环中的哪个密钥。该
key_type
参数提供有关密钥的其他信息,例如其加密方法或预期用途。密钥环服务函数将密钥 ID、用户名、类型和值视为二进制字符串,因此比较区分大小写。例如,ID
MyKey
和mykey
引用不同的密钥。
这些密钥环服务功能可用:
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
: 以空字符结尾的字符串,它们成对构成一个唯一标识符,指示要获取的键。key_type
: 缓冲区指针的地址。该函数在其中存储指向空终止字符串的指针,该字符串提供有关密钥的附加信息(在添加密钥时存储)。key
: 缓冲区指针的地址。该函数在其中存储一个指向包含获取的密钥数据的缓冲区的指针。key_len
:变量的地址,函数将*key
缓冲区的大小(以字节为单位)存储到该变量中。
返回值:
成功返回 0,失败返回 1。
my_key_generate()
生成给定类型和长度的新随机密钥并将其存储在密钥环中。密钥的长度为 并且与由和
key_len
形成的标识符相关联。类型和长度值必须与底层密钥环插件支持的值一致。请参阅第 6.4.4.13 节,“支持的密钥环密钥类型和长度”。key_id
user_id
句法:
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
:一个以 null 结尾的字符串,提供有关密钥的附加信息。key_len
:要生成的密钥的大小(以字节为单位)。
返回值:
成功返回 0,失败返回 1。
my_key_remove()
从密钥环中删除密钥。
句法:
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_id
,user_id
: 以空字符结尾的字符串,它们成对构成要存储的键的唯一标识符。key_type
:一个以 null 结尾的字符串,提供有关密钥的附加信息。key
:包含要存储的关键数据的缓冲区。key_len
key
:缓冲区 的大小(以字节为单位) 。
返回值:
成功返回 0,失败返回 1。