Documentation Home

6.4.4.2 密钥环组件安装

密钥环服务消费者需要安装密钥环组件或插件:

笔记

一次只能启用一个密钥环组件或插件。不支持启用多个密钥环组件或插件,结果可能与预期不同。

如果您需要支持持久系统变量值的安全存储,则必须在 MySQL 服务器实例上启用密钥环组件,而不是不支持该功能的密钥环插件。请参阅 保留敏感系统变量

MySQL 提供了这些密钥环组件选择:

  • component_keyring_file:将密钥环数据存储在服务器主机的本地文件中。在 MySQL Community Edition 和 MySQL Enterprise Edition 发行版中可用。

  • component_keyring_encrypted_file:将密钥环数据存储在服务器主机本地的加密、受密码保护的文件中。在 MySQL 企业版发行版中可用。

  • component_keyring_oci:将密钥环数据存储在 Oracle Cloud Infrastructure Vault 中。在 MySQL 企业版发行版中可用。

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

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

与密钥环插件不同,密钥环组件不使用--early-plugin-load服务器选项加载或使用系统变量配置。相反,服务器使用清单确定在启动期间加载哪个密钥环组件,并且加载的组件在初始化时查询自己的配置文件。因此,要安装密钥环组件,您必须:

  1. 编写一个清单,告诉服务器要加载哪个密钥环组件。

  2. 为该密钥环组件编写一个配置文件。

安装密钥环组件的第一步是编写一个清单,指示要加载哪个组件。在启动期间,服务器读取全局清单文件或与本地清单文件配对的全局清单文件:

  • 服务器尝试从安装服务器的目录中读取其全局清单文件。

  • 如果全局清单文件指示使用本地清单文件,则服务器会尝试从数据目录中读取其本地清单文件。

  • 尽管全局和本地清单文件位于不同的目录中,但文件名 mysqld.my位于两个位置。

  • 清单文件不存在并不是错误。在这种情况下,服务器不会尝试加载与该文件关联的任何组件。

本地清单文件允许为服务器的多个实例设置组件加载,这样每个服务器实例的加载指令特定于给定的数据目录实例。这使得不同的 MySQL 实例可以使用不同的密钥环组件。

服务器清单文件具有以下属性:

  • 清单文件必须采用有效的 JSON 格式。

  • 清单文件允许这些项目:

    • "read_local_manifest":此项仅在全局清单文件中允许。如果该项不存在,则服务器仅使用全局清单文件。如果该项存在,则其值为 truefalse,指示服务器是否应从本地清单文件中读取组件加载信息。

      如果该"read_local_manifest"项目与其他项目一起出现在全局清单文件中,则服务器 "read_local_manifest"首先检查项目值:

      • 如果值为false,则服务器处理全局清单文件中的其他项目并忽略本地清单文件。

      • 如果值为true,服务器将忽略全局清单文件中的其他项目并尝试读取本地清单文件。

    • "components":此项表示加载哪个组件。项目值是一个字符串,它指定一个有效的组件 URN,例如 "file://component_keyring_file". 组件 URN 开头file://并指示位于实现该组件的 MySQL 插件目录中的库文件的基本名称。

  • 服务器对清单文件的访问应该是只读的。例如,mysqld.my服务器清单文件可能由 拥有root并可读/写root,但应该只读给用于运行 MySQL 服务器的帐户。如果在启动期间发现清单文件对该帐户具有读/写权限,则服务器会向错误日志写入一条警告,建议将该文件设置为只读。

  • 数据库管理员有责任创建要使用的任何清单文件,并确保其访问模式和内容正确。如果发生错误,服务器启动失败,管理员必须更正服务器错误日志中诊断指示的任何问题。

鉴于前面的清单文件属性,要配置服务器加载,在mysqldcomponent_keyring_file安装目录中创建一个名为的全局清单文件,并可选择 在数据目录中创建一个本地清单文件,也名为 。以下说明描述了如何加载 . 要加载不同的密钥环组件,请将其名称替换为 . mysqld.mymysqld.mycomponent_keyring_filecomponent_keyring_file

  • 仅使用全局清单文件,文件内容如下所示:

    {
      "components": "file://component_keyring_file"
    }

    在安装mysqld 的目录中创建此文件 。

  • 或者,要使用全局和本地清单文件对,全局文件如下所示:

    {
      "read_local_manifest": true
    }

    在安装mysqld 的目录中创建此文件 。

    本地文件如下所示:

    {
      "components": "file://component_keyring_file"
    }

    在数据目录中创建此文件。

有了清单,继续配置密钥环组件。为此,请检查所选密钥环组件的说明以获取特定于该组件的配置说明:

执行任何特定于组件的配置后,启动服务器。通过检查 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 语句重新加载配置。

Keyring 组件应该只使用清单文件加载,而不是使用INSTALL COMPONENT语句加载。使用该语句加载的密钥环组件在服务器启动序列中对于某些使用密钥环的组件(例如 )可能太晚可用 InnoDB,因为它们已在 mysql.component系统表中注册并自动加载以供后续服务器重新启动。但是 mysql.component是一个 表,所以任何在其中命名的组件只有在初始化 InnoDB后才能在启动时加载 。InnoDB

如果当组件尝试访问密钥环服务时没有密钥环组件或插件可用,则该组件不能使用该服务。因此,组件可能无法初始化或可能会使用有限的功能进行初始化。例如,如果InnoDB在初始化时发现有加密的表空间,它会尝试访问密钥环。如果密钥环不可用, InnoDB则只能访问未加密的表空间。