密钥环服务消费者需要安装密钥环组件或插件:
-
要使用密钥环插件,请从这里开始按照说明进行操作。(另外,对于插件的安装的常规信息,请参阅第 7.6.1 节,“安装和卸载插件”。)
-
要使用密钥环组件,请从第 8.4.4.2 节,“密钥环组件安装”开始。
-
如果您计划使用密钥环函数与所选的密钥环组件或插件一起使用,请在安装该组件或插件后,按照第 8.4.4.15 节,“通用密钥环密钥管理函数”中的说明安装这些函数。
一次只能启用一个密钥环组件或插件。启用多个密钥环组件或插件是不支持的,结果可能不如预期。
如果您需要支持持久系统变量的安全存储,而不是密钥环插件,请在 MySQL 服务器实例上启用密钥环组件。请参阅持久敏感系统变量。
MySQL 提供以下密钥环插件选择:
-
keyring_file
(已弃用):在服务器主机的本地文件中存储密钥环数据。可在 MySQL 社区版和 MySQL 企业版发行版中使用。有关安装替换该插件的组件的说明,请参阅第 8.4.4.2 节,“密钥环组件安装”。 -
keyring_encrypted_file
(已弃用):在服务器主机的本地加密、密码保护文件中存储密钥环数据。可在 MySQL 企业版发行版中使用。有关安装替换该插件的组件的说明,请参阅第 8.4.4.2 节,“密钥环组件安装”。 -
keyring_okv
:用于 KMIP 1.1 的插件,适用于 KMIP 兼容的后端密钥环存储产品,如 Oracle Key Vault 和 Gemalto SafeNet KeySecure 设备。可在 MySQL 企业版发行版中使用。 -
keyring_aws
:与 Amazon Web Services 密钥管理服务通信,以生成密钥,并使用本地文件存储密钥。可在 MySQL 企业版发行版中使用。 -
keyring_hashicorp
:与 HashiCorp Vault 通信,以存储密钥。可在 MySQL 企业版发行版中使用。 -
keyring_oci
(已弃用):与 Oracle Cloud Infrastructure Vault 通信,以存储密钥。请参阅第 8.4.4.12 节,“使用 Oracle Cloud Infrastructure Vault 密钥环插件”。
要使插件库文件可供服务器使用,必须将其位于 MySQL 插件目录中(由plugin_dir
系统变量命名的目录)。如果必要,请在服务器启动时设置plugin_dir
的值。
密钥环组件或插件必须在服务器启动序列的早期加载,以便其他组件可以在初始化时访问它。例如,InnoDB
存储引擎使用密钥环来加密表空间,因此在 InnoDB
初始化之前必须加载密钥环组件或插件。
每个密钥环插件的安装类似。以下说明描述如何安装 keyring_file
。要使用不同的密钥环插件,请将其名称替换为 keyring_file
。
插件库文件的基本名称是 keyring_file
。文件名后缀因平台而异(例如,Unix 和 Unix-like 系统上的 .so
,Windows 上的 .dll
)。
要加载插件,请使用 --early-plugin-load
选项来命名包含插件的库文件。例如,在平台上插件库文件后缀为 .so
的情况下,请在服务器的 my.cnf
文件中使用以下行,根据需要调整 .so
后缀:
[mysqld]
early-plugin-load=keyring_file.so
在启动服务器之前,请检查所选keyring插件的笔记,以获取该插件特定的配置说明:
-
keyring_file
: 第8.4.4.6节,“使用keyring_file文件基于的Keyring插件”。 -
keyring_encrypted_file
: 第8.4.4.7节,“使用keyring_encrypted_file加密文件基于的Keyring插件”。 -
keyring_okv
: 第8.4.4.8节,“使用keyring_okv KMIP插件”。 -
keyring_aws
: 第8.4.4.9节,“使用keyring_aws Amazon Web Services Keyring插件”。 -
keyring_hashicorp
: 第8.4.4.10节,“使用HashiCorp Vault Keyring插件”。 -
keyring_oci
: 第8.4.4.12节,“使用Oracle Cloud Infrastructure Vault Keyring插件”。
执行任何插件特定配置后,启动服务器。通过检查信息模式PLUGINS
表或使用SHOW PLUGINS
语句(见第7.6.2节,“获取服务器插件信息”)。例如:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE 'keyring%';
+--------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+--------------+---------------+
| keyring_file | ACTIVE |
+--------------+---------------+
如果插件无法初始化,请检查服务器错误日志以获取诊断信息。
插件可以通过其他方法加载,而不是--early-plugin-load
,例如--plugin-load
或--plugin-load-add
选项或INSTALL PLUGIN
语句。然而,使用这些方法加载的keyring插件可能太晚在服务器启动序列中不可用,以致于某些组件无法使用keyring,例如InnoDB
:
-
使用
--plugin-load
或--plugin-load-add
加载插件是在InnoDB
初始化之后。 -
使用
INSTALL PLUGIN
安装的插件将注册在mysql.plugin
系统表中,并在后续服务器重新启动时自动加载。然而,因为mysql.plugin
是一个InnoDB
表,因此任何在其中命名的插件只能在启动时加载InnoDB
初始化之后。
如果在组件尝试访问keyring服务时没有可用的keyring组件或插件,该服务将无法被该组件使用。结果,该组件可能无法初始化或只能以有限的功能初始化。例如,如果InnoDB
在初始化时发现有加密表空间,它将尝试访问keyring。如果keyring不可用,InnoDB
只能访问未加密的表空间。为了确保InnoDB
可以访问加密表空间,请使用--early-plugin-load
加载keyring插件。