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_id
和user_id
参数组成一个唯一的组合,指示要使用的密钥在密钥ring中的位置。 -
key_type
参数提供关于密钥的额外信息,例如加密方法或用途。 -
密钥ring服务函数将密钥ID、用户名、类型和值视为二进制字符串,因此比较是区分大小写的。例如,
MyKey
和mykey
的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_id
,user_id
: 为空终止的字符串对,它们作为一对形成唯一标识符,指示要检索的密钥。 -
key_type
: 缓冲区指针的地址。函数将在其中存储一个指向null-terminated字符串的指针,该字符串提供关于密钥(在添加密钥时存储)的额外信息。 -
key
: 缓冲指针的地址。函数将缓冲区包含的键数据的指针存储到其中。 -
key_len
: 函数将*
key缓冲区的大小(以字节为单位)存储到其中的变量地址。
返回值:
成功时返回0,失败时返回1。
-
-
my_key_generate()
生成一个给定类型和长度的新随机键,并将其存储到密钥ring中。该键的长度为
key_len
,与由key_id
和user_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_id
,user_id
: 两个空终止字符串组成的唯一标识符,用于存储要存储的密钥。 -
key_type
: 空终止字符串,提供关于密钥的额外信息。 -
key
: 包含要存储的密钥数据的缓冲区。 -
key_len
:key
缓冲区的大小(以字节为单位)。
返回值:
成功返回 0,失败返回 1。
-