Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Keyring Component Installation

8.4.4.2 密钥环组件安装

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

Note

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

MySQL 提供以下密钥环组件选择:

  • component_keyring_file:在服务器主机的本地文件中存储密钥环数据。可在 MySQL 社区版和 MySQL 企业版发行版中使用。

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

  • component_keyring_oci:在 Oracle 云基础设施 Vault 中存储密钥环数据。可在 MySQL 企业版发行版中使用。

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

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

Note

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

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

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

  2. 编写该密钥环组件的配置文件。

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

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

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

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

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

本地清单文件允许为每个服务器实例设置组件加载,以便每个服务器实例都可以使用不同的密钥环组件。

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

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

  • 清单文件允许以下项目:

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

      如果全局清单文件中存在 "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 安装目录中,并可选地创建一个名为 mysqld.my 的本地清单文件,在数据目录中。以下说明描述了如何加载 component_keyring_file。要加载不同的密钥环组件,请将其名称替换为 component_keyring_file

  • 要仅使用全局清单文件,该文件的内容如下:

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

    mysqld 安装目录中创建该文件。

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

    {
      "read_local_manifest": true
    }

    mysqld 安装目录中创建该文件。

    本地文件如下:

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

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

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

在执行任何组件特定配置后,启动服务器。通过检查性能架构 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 只能访问未加密的表空间。