8.4.4.2 密钥环组件安装
密钥环服务消费者需要安装一个密钥环组件或插件:
-
要使用密钥环组件,请从这里开始。
-
要使用密钥环插件,请从第8.4.4.3节,“Keyring Plugin Installation”开始。
-
如果您计划使用密钥环函数与选择的密钥环组件或插件一起使用,请在安装该组件或插件后,使用第8.4.4.12节,“General-Purpose Keyring Key-Management Functions”中的指令安装函数。
在任何时候,只能启用一个密钥环组件或插件。启用多个密钥环组件或插件是未支持的,结果可能不如预期。
MySQL 提供以下密钥环组件选择:
-
component_keyring_file
:将密钥环数据存储在服务器主机本地文件中。可用在 MySQL Community Edition 和 MySQL Enterprise Edition 发行版中。 -
component_keyring_encrypted_file
:将密钥环数据存储在加密、密码保护的文件中,服务器主机本地文件中。可用在 MySQL Enterprise Edition 发行版中。 -
component_keyring_oci
:将密钥环数据存储在 Oracle Cloud Infrastructure Vault 中。可用在 MySQL Enterprise Edition 发行版中。
为了使服务器能够使用组件库文件,该文件必须位于MySQL插件目录(由plugin_ dir
系统变量指定的目录)中。如果必要,可以在服务器启动时通过设置plugin_ dir
的值来配置插件目录位置。
密钥ring组件或插件必须在服务器启动序列的早期阶段加载,以便其他组件可以在它们自己的初始化过程中访问它。例如,InnoDB
存储引擎使用密钥ring来加密表空间,因此在InnoDB
初始化之前必须加载并可用密钥ring组件或插件。
如果您需要支持 persisted 系统变量值的安全存储,必须在 MySQL 服务器实例上启用密钥ring组件。密钥ring 插件不支持该功能。请参阅 Persisting Sensitive System Variables。
与密钥ring 插件不同,密钥ring 组件不使用--early-plugin-load
服务器选项或系统变量来加载。相反,服务器在启动时使用清单来确定要加载哪个密钥ring 组件,然后加载的组件在初始化时 consulted 自己的配置文件。因此,要安装密钥ring 组件,您必须:
-
编写一个清单,以便告诉服务器要加载哪个密钥ring 组件。
-
编写该密钥ring 组件的配置文件。
安装密钥ring组件的第一步是编写一个manifest文件,该文件指示要加载哪个组件。在启动时,服务器从安装目录读取全局manifest文件,或者从数据目录读取全局manifest文件和本地manifest文件:
-
服务器尝试从安装目录中读取其全局manifest文件。
-
如果全局manifest文件指示使用本地manifest文件,服务器尝试从数据目录中读取其本地manifest文件。
-
虽然全局和本地manifest文件位于不同的目录中,但它们的文件名都是
mysqld.my
。 -
如果manifest文件不存在,这不是错误。服务器在这种情况下不尝试加载相关组件。
本地manifest文件允许为多个服务器实例设置组件加载,以便每个服务器实例的加载指令都是特定于给定的数据目录实例。这使得不同的MySQL实例可以使用不同的密钥ring组件。
服务器manifest文件具有以下属性:
-
manifest文件必须是有效的JSON格式。
-
manifest文件允许这些项目:
-
"read_local_manifest"
:这个项目只能在全局manifest文件中出现。如果项目不存在,服务器只使用全局manifest文件。如果项目存在,它的值是true
或false
,表示服务器是否应该从本地manifest文件中读取组件加载信息。如果全局manifest文件中的
"read_local_manifest"
项目与其他项目一起出现,服务器首先检查"read_local_manifest"
项目的值:-
如果值为
false
,服务器将处理全局清单文件中的其他项目,并忽略本地清单文件。 -
如果值为
true
,服务器将忽略全局清单文件中的其他项目,并尝试读取本地清单文件。
-
-
"components"
:这个项目指示要加载哪个组件。项目值是一个字符串,指定一个有效的组件URN,如"file://component_keyring_file"
。组件URN以file://
开头,并表示实现该组件的库文件的基础名称,该文件位于MySQL插件目录中。
-
-
服务器对清单文件的访问应该是只读的。例如,一个
mysqld.my
服务器清单文件可能由root
所有,并且可以读写为root
,但是应该只读给用于运行MySQL服务器的账户。如果在启动时发现该文件是该账户可读写的,服务器将向错误日志中写入警告,建议将文件设置为只读。 -
数据库管理员负责创建要使用的清单文件,并确保它们的访问模式和内容正确。如果出现错误,服务器启动失败,管理员必须根据服务器错误日志中的诊断信息进行更正。
根据前面的清单文件属性,配置服务器以加载component_keyring_file
,创建一个全局清单文件名为mysqld. my
在mysqld安装目录中, optionally 创建一个本地清单文件,也名为mysqld.my
在数据目录中。以下 instructions 描述如何加载component_keyring_file
。要加载不同的密钥环组件,请将其名称替换为component_keyring_file
。
manifest 在位后,继续配置密钥环组件。要做到这,请查看您选择的密钥环组件的notes,以获取特定于该组件的配置说明:
-
component_keyring_file
:第 8.4.4.4 节,“使用 component_keyring_file 文件-基于密钥环组件”。 -
component_keyring_encrypted_file
: 第8.4.4.5节,“使用加密文件键-ring组件”. -
component_keyring_oci
: 第8.4.4.9节,“使用Oracle Cloud Infrastructure Vault Keyring 组件”.
完成任何组件特定的配置后,启动服务器。通过检查性能chema中的keyring_component_status表来验证组件安装:
mysql> SELECT * FROM performance_schema.keyring_component_status;
+---------------------+-------------------------------------------------+
| STATUS_KEY | STATUS_VALUE |
+---------------------+-------------------------------------------------+
| Component_name | component_keyring_file |
| Author | Oracle Corporation |
| License | GPL |
| Implementation_name | component_keyring_file |
| Version | 1.0 |
| Component_status | Active |
| Data_file | /usr/local/mysql/keyring/component_keyring_file |
| Read_only | No |
+---------------------+-------------------------------------------------+
一个Component_status
值为Active
表示该组件初始化成功。
如果组件无法加载,服务器启动失败。检查服务器错误日志以获取诊断信息。如果组件加载但由于配置问题而无法初始化,服务器启动成功,但Component_status
值为Disabled
。检查服务器错误日志,纠正配置问题,然后使用ALTER INSTANCE RELOAD KEYRING
语句重新加载配置。
密钥环组件应该通过使用清单文件来加载,而不是使用INSTALL COMPONENT
语句。使用该语句加载的密钥环组件可能在服务器启动序列中太晚被加载,以至于某些使用密钥环的组件,例如InnoDB
,无法正常工作,因为它们注册在mysql.component
系统表中,并自动在后续服务器重启时加载。但是mysql.component
是一个InnoDB
表,因此任何在其中命名的组件只能在启动时被加载,且只能在InnoDB
初始化完成后。
如果某个组件尝试访问密钥环服务,但没有可用的密钥环组件或插件,那么该服务就无法由该组件使用。结果,该组件可能无法初始化或只能以有限功能初始化。例如,如果InnoDB
在初始化时发现有加密的表空间,它将尝试访问密钥环。如果密钥环不可用,InnoDB
只能访问未加密的表空间。