密钥环服务使用者要求安装密钥环组件或插件
要使用密钥环组件,请从此处的说明开始。
要改用密钥环插件,请从第 8.4.4.3 节“密钥环插件安装”开始。
如果打算将密钥环函数与所选的密钥环组件或插件结合使用,请在安装该组件或插件后,使用第 8.4.4.12 节“通用密钥环密钥管理功能”中的说明安装函数。
一次只能启用一个密钥环组件或插件。不支持启用多个密钥环组件或插件,并且结果可能与预期不符。
MySQL 提供以下密钥环组件选择
component_keyring_file
:将密钥环数据存储在服务器主机本地文件。在 MySQL 社区版和 MySQL 企业版发行版中可用。component_keyring_encrypted_file
:将密钥环数据存储在服务器主机本地加密的、受密码保护的文件中。在 MySQL 企业版发行版中可用。component_keyring_oci
:将密钥环数据存储在 Oracle 云基础设施 Vault 中。在 MySQL 企业版发行版中可用。
要供服务器使用,组件库文件必须位于 MySQL 插件目录(由plugin_dir
系统变量命名的目录)中。如有必要,请在服务器启动时设置plugin_dir
的值来配置插件目录位置。
密钥环组件或插件必须在服务器启动顺序的早期加载,以便其他组件可以在其初始化过程中根据需要访问它。例如,InnoDB
存储引擎使用密钥环进行表空间加密,因此必须在InnoDB
初始化之前加载并提供密钥环组件或插件。
如果需要支持持久化系统变量值的 sécurisé 存储,则必须在 MySQL 服务器实例上启用密钥环组件。密钥环插件不支持该功能。请参阅持久化敏感系统变量。
与密钥环插件不同,密钥环组件不使用--early-plugin-load
服务器选项加载,也不使用系统变量配置。相反,服务器在启动期间使用清单确定要加载哪个密钥环组件,并且加载的组件在初始化时会参考其自己的配置文件。因此,要安装密钥环组件,您必须
编写一个清单,告诉服务器要加载哪个密钥环组件。
为该密钥环组件编写配置文件。
安装密钥环组件的第一步是编写一个清单,指示要加载哪个组件。在启动期间,服务器会读取全局清单文件,或者读取与本地清单文件配对的全局清单文件
服务器尝试从安装服务器的目录中读取其全局清单文件。
如果全局清单文件指示使用本地清单文件,则服务器会尝试从数据目录中读取其本地清单文件。
尽管全局清单文件和本地清单文件位于不同的目录中,但文件名在两个位置都是
mysqld.my
。清单文件不存在不是错误。在这种情况下,服务器不会尝试加载与该文件关联的任何组件。
本地清单文件允许为服务器的多个实例设置组件加载,以便每个服务器实例的加载指令特定于给定的数据目录实例。这使得不同的 MySQL 实例可以使用不同的密钥环组件。
服务器清单文件具有以下属性:
清单文件必须采用有效的 JSON 格式。
清单文件允许以下项目:
"read_local_manifest"
:此项目仅在全局清单文件中允许使用。如果该项目不存在,则服务器仅使用全局清单文件。如果该项目存在,则其值为true
或false
,指示服务器是否应从本地清单文件中读取组件加载信息。如果全局清单文件中存在
"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 安装目录中创建一个名为 mysqld.my
的全局清单文件,并在数据目录中创建一个名为 mysqld.my
的本地清单文件(可选)。以下说明介绍了如何加载 component_keyring_file
。要加载其他密钥环组件,请将其名称替换为 component_keyring_file
。
清单文件到位后,继续配置密钥环组件。为此,请查看所选密钥环组件的说明,以获取特定于该组件的配置说明。
component_keyring_file
:第 8.4.4.4 节“使用基于文件的 component_keyring_file 密钥环组件”。component_keyring_encrypted_file
:第 8.4.4.5 节“使用加密的基于文件的 component_keyring_encrypted_file 密钥环组件”。component_keyring_oci
:第 8.4.4.9 节“使用 Oracle 云基础设施 Vault 密钥环组件”。
执行任何特定于组件的配置后,启动服务器。通过检查 Performance Schema 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
只能访问未加密的表空间。