6.4.4.1 Keyring 插件安装

密钥环服务使用者需要安装密钥环插件。 MySQL 提供了以下插件选择:

  • keyring_file:将密钥环数据存储在服务器主机本地的文件中。从 MySQL 5.7.11 开始在所有 MySQL 发行版中可用。

  • keyring_encrypted_file:将密钥环数据存储在服务器主机本地的加密文件中。自 MySQL 5.7.21 起在 MySQL 企业版发行版中提供。

  • keyring_okv:使用兼容 KMIP 的后端密钥环存储产品,例如 Oracle Key Vault 和 Gemalto SafeNet KeySecure Appliance。自 MySQL 5.7.12 起在 MySQL 企业版发行版中可用。

  • keyring_aws:与 Amazon Web Services 密钥 Management 服务作为后端进行密钥生成进行通信,并使用本地文件进行密钥存储。自 MySQL 5.7.19 起在 MySQL 企业版发行版中可用。

本节介绍如何安装您选择的密钥环插件。有关安装插件的一般信息,请参见第 5.5.1 节“安装和卸载插件”

如果您打算结合使用 keyring 用户定义函数(UDF)和 keyring 插件,请在安装插件后使用第 6.4.4.8 节“通用密钥环密钥 Management 功能”中的说明安装 UDF。

要由服务器使用,插件库文件必须位于 MySQL 插件目录(由plugin_dir系统变量命名的目录)中。如有必要,通过在服务器启动时设置plugin_dir的值来配置插件目录位置。

每个密钥环插件的安装都类似。以下说明使用keyring_file。使用其他密钥环插件的用户可以将其名称替换为keyring_file

keyring_file插件库文件的基本名称为keyring_file。文件名后缀因平台而异(例如,对于 Unix 和类 Unix 系统,为.so;对于 Windows,为.dll)。

Note

一次只能启用一个 Keyring 插件。不支持启用多个密钥环插件,并且结果可能与预期不符。

密钥环插件必须在服务器启动序列的早期加载,以便服务器组件可以在其自己的初始化期间根据需要对其进行访问。例如,InnoDB存储引擎使用密钥环进行 table 空间加密,因此必须在InnoDB初始化之前加载密钥环插件并使其可用。

要加载插件,请使用--early-plugin-load选项命名包含它的插件库文件。例如,在插件库文件后缀为.so的平台上,请在服务器my.cnf文件中使用以下行,并根据需要调整平台的.so后缀:

[mysqld]
early-plugin-load=keyring_file.so

从 MySQL 5.7.12 开始,默认的--early-plugin-load值为空。要加载密钥环插件,您必须使用具有非空值的显式--early-plugin-load选项。

Important

在 MySQL 5.7.11 中,默认的--early-plugin-load值为keyring_file插件库文件的名称,因此默认情况下已加载该插件。 InnoDBtable 空间加密要求在InnoDB初始化之前先加载keyring_file插件,因此默认--early-plugin-load值的这种更改引入了从 5.7.11 升级到 5.7.12 或更高版本的不兼容性。加密了InnoDBtable 空间的 Management 员必须采取显式操作,以确保 continue 加载keyring_file插件:使用名为插件库文件的--early-plugin-load选项启动服务器。

启动服务器之前,请查看所选密钥环插件的说明,以查看它是否允许或需要其他配置:

执行任何特定于插件的配置后,请验证插件安装。在运行 MySQL 服务器的情况下,检查INFORMATION_SCHEMA.PLUGINStable 或使用SHOW PLUGINS语句(请参见第 5.5.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语句。但是,对于某些服务器组件,例如InnoDB,使用这些方法加载的密钥环插件可能在服务器启动 Sequences 中太晚可用:

  • InnoDB初始化之后,使用--plugin-load--plugin-load-add进行插件加载。

  • 使用INSTALL PLUGIN安装的插件已注册在mysql.plugin系统 table 中,并自动加载以供随后的服务器重新启动。但是,由于mysql.pluginInnoDBtable,因此仅在InnoDB初始化之后才能在启动期间加载其中命名的任何插件。

如果服务器组件尝试访问密钥环服务时没有密钥环插件可用,则该组件无法使用该服务。结果,该组件可能无法初始化或可能会以有限的功能进行初始化。例如,如果InnoDB初始化时发现存在加密的 table 空间,它将尝试访问密钥环。如果密钥环不可用,则InnoDB只能访问未加密的 table 空间。为确保InnoDB也可以访问加密的 table 空间,请使用--early-plugin-load加载密钥环插件。