Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

8.4.4.2 密钥环组件安装

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

Note

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

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组件或插件。

Note

如果您需要支持 persisted 系统变量值的安全存储,必须在 MySQL 服务器实例上启用密钥ring组件。密钥ring 插件不支持该功能。请参阅 Persisting Sensitive System Variables

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

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

  2. 编写该密钥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文件。如果项目存在,它的值是truefalse,表示服务器是否应该从本地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. mymysqld安装目录中, optionally 创建一个本地清单文件,也名为mysqld.my在数据目录中。以下 instructions 描述如何加载component_keyring_file。要加载不同的密钥环组件,请将其名称替换为component_keyring_file

  • 只使用全局清单文件时,文件内容如下:

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

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

  • alternatively,使用全局和本地清单文件对 pair 时,全局文件如下:

    {
      "read_local_manifest": true
    }

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

    本地文件如下:

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

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

manifest 在位后,继续配置密钥环组件。要做到这,请查看您选择的密钥环组件的notes,以获取特定于该组件的配置说明:

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