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
插件库文件的名称,因此默认情况下已加载该插件。 InnoDB
table 空间加密要求在InnoDB
初始化之前先加载keyring_file
插件,因此默认--early-plugin-load值的这种更改引入了从 5.7.11 升级到 5.7.12 或更高版本的不兼容性。加密了InnoDB
table 空间的 Management 员必须采取显式操作,以确保 continue 加载keyring_file
插件:使用名为插件库文件的--early-plugin-load选项启动服务器。
启动服务器之前,请查看所选密钥环插件的说明,以查看它是否允许或需要其他配置:
-
keyring_file
: 第 6.4.4.2 节“使用 keyring_file 基于文件的插件”. -
keyring_encrypted_file
: 第 6.4.4.3 节“使用 keyring_encrypted_file 密钥环插件”. -
keyring_okv
: 第 6.4.4.4 节“使用 keyring_okv KMIP 插件”. -
keyring_aws
: 第 6.4.4.5 节“使用 keyring_aws Amazon Web Services 密钥环插件”
执行任何特定于插件的配置后,请验证插件安装。在运行 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.plugin
是InnoDB
table,因此仅在InnoDB
初始化之后才能在启动期间加载其中命名的任何插件。
如果服务器组件尝试访问密钥环服务时没有密钥环插件可用,则该组件无法使用该服务。结果,该组件可能无法初始化或可能会以有限的功能进行初始化。例如,如果InnoDB
初始化时发现存在加密的 table 空间,它将尝试访问密钥环。如果密钥环不可用,则InnoDB
只能访问未加密的 table 空间。为确保InnoDB
也可以访问加密的 table 空间,请使用--early-plugin-load加载密钥环插件。