文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  Keyring 组件安装

8.4.4.2 Keyring 组件安装

Keyring 服务使用者要求安装 Keyring 组件或插件。

注意

一次只能启用一个 Keyring 组件或插件。不支持启用多个 Keyring 组件或插件,并且结果可能与预期不符。

MySQL 提供以下 Keyring 组件选项:

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

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

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

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

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

注意

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

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

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

  2. 为该 Keyring 组件编写配置文件。

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

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

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

  • 尽管全局和本地清单文件位于不同的目录中,但文件名在两个位置都是 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 服务器的帐户应仅对其具有读取权限。如果在启动期间发现清单文件对该帐户具有读/写权限,则服务器会在错误日志中写入一条警告,建议将该文件设为只读。

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

鉴于上述清单文件属性,要将服务器配置为加载 component_keyring_file,请在 mysqld 安装目录中创建一个名为 mysqld.my 的全局清单文件,并在数据目录中创建一个可选的本地清单文件(也名为 mysqld.my)。以下说明介绍了如何加载 component_keyring_file。要加载其他密钥环组件,请将其名称替换为 component_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 语句重新加载配置。

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

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