6.4.4.7 在密钥环密钥库之间迁移密钥

从 MySQL 5.7.21 开始,MySQL 服务器支持一种操作模式,该模式允许在基础密钥环密钥库之间迁移密钥,从而允许 DBA 将 MySQL 安装从一个密钥环插件切换到另一个密钥环插件。迁移服务器(即,以密钥迁移模式启动的服务器)不接受 Client 端连接。相反,它仅运行足够长的时间来迁移密钥,然后退出。迁移服务器将错误报告给控制台(标准错误输出)。

可以执行离线或在线密钥迁移:

  • 如果您确定 localhost 上没有正在运行的服务器在使用源或目标密钥库,则可以进行脱机迁移。在这种情况下,迁移服务器可以修改密钥库,而没有运行中的服务器在迁移期间修改密钥库内容的可能性。

  • 如果 localhost 上正在运行的服务器正在使用源或目标密钥库,则必须执行在线迁移。在这种情况下,迁移服务器将连接到正在运行的服务器,并指示其在进行密钥迁移时暂停密钥环操作。

密钥迁移操作的结果是,目标密钥库包含其在迁移之前拥有的密钥,以及源密钥库中的密钥。源密钥库在迁移前后是相同的,因为密钥是复制的,而不是移动的。如果目标密钥库中已经存在要复制的密钥,则会发生错误,并且目标密钥库将还原到其预迁移状态。

以密钥迁移方式调用服务器的用户不能是rootos 用户,并且必须具有读写密钥环文件的权限。

要执行密钥迁移操作,请确定需要哪些密钥迁移选项。迁移选项指示涉及哪些密钥环插件,以及执行离线还是在线迁移:

这些选项告诉服务器以密钥迁移模式运行。这两个选项对于所有关键迁移操作都是必需的。源插件和目标插件必须不同,并且迁移服务器必须同时支持这两个插件。

  • 对于脱机迁移,不需要其他关键迁移选项。

Warning

不要执行涉及正在运行的服务器正在使用的密钥库的脱机迁移。

  • 对于联机迁移,某些正在运行的服务器当前正在使用源或目标密钥库。指定指示如何连接到正在运行的服务器的密钥迁移选项。这是必需的,以便迁移服务器可以连接到正在运行的服务器,并告诉它在迁移操作期间暂停使用密钥环。

使用以下任何选项均 table 示在线迁移:

有关密钥迁移选项的其他详细信息,请参见第 6.4.4.10 节,“密钥环命令选项”

使用刚刚确定的关键迁移选项(可能还有其他选项)启动迁移服务器。请记住以下注意事项:

  • 可能需要其他服务器选项,例如两个密钥环插件的其他配置参数。例如,如果keyring_file是插件之一,则如果密钥环数据文件位置不是默认位置,则必须设置keyring_file_data系统变量。也可能需要其他非密钥选项。指定这些选项的一种方法是使用--defaults-file命名包含所需选项的选项文件。

  • 如果从不同于通常用于运行 MySQL 的系统帐户调用迁移服务器,则它可能会创建在正常操作期间服务器无法访问的密钥环目录或文件。假设mysqld通常以mysqlos 用户身份运行,但是您以isabel登录时调用了迁移服务器。迁移服务器创建的任何新目录或文件将归isabel拥有。当以mysqlos 用户身份运行的服务器尝试访问isabel拥有的文件系统对象时,后续启动将失败。

为避免此问题,请以rootos 用户身份启动迁移服务器并提供--user=user_name选项,其中* user_name *是通常用于运行 MySQL 的系统帐户。

  • 迁移服务器希望路径名选项值为完整路径。相对路径名可能无法按预期解析。

离线密钥迁移的示例命令行:

mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
  --keyring-migration-source=keyring_file.so
  --keyring-migration-destination=keyring_encrypted_file.so
  --keyring_encrypted_file_password=password

在线密钥迁移的示例命令行:

mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
  --keyring-migration-source=keyring_file.so
  --keyring-migration-destination=keyring_encrypted_file.so
  --keyring_encrypted_file_password=password
  --keyring-migration-host=localhost
  --keyring-migration-user=root
  --keyring-migration-password=root_password

密钥迁移服务器执行迁移操作如下:

  • (仅联机迁移)使用连接选项连接到正在运行的服务器。用于连接的帐户必须具有修改全局keyring_operations系统变量所需的SUPER特权。

  • (仅在线迁移)在运行的服务器上禁用keyring_operations。 (正在运行的服务器必须支持keyring_operations,这意味着它必须来自 MySQL 5.7.21 或更高版本。)

  • 加载源和目标密匙环插件。

  • 将密钥从源密钥环复制到目标密钥环。

  • 卸载密钥环插件。

  • (仅在线迁移)在运行的服务器上启用keyring_operations

  • (仅联机迁移)与正在运行的服务器断开连接。

  • Exit.

如果在密钥迁移期间发生错误,则将删除复制到目标插件的所有密钥,从而使目标密钥库保持不变。

Important

对于联机迁移操作,迁移服务器负责在运行的服务器上启用和禁用keyring_operations。但是,如果迁移服务器异常退出(例如,如果有人强行终止了迁移服务器),则可能无法在运行的服务器上重新启用keyring_operations,从而使其无法执行密钥环操作。在这种情况下,可能需要连接到正在运行的服务器并手动启用keyring_operations

成功完成在线密钥迁移操作后,可能需要重新启动运行中的服务器:

  • 如果正在运行的服务器正在使用源密钥库,则在迁移后无需重新启动它。

  • 如果正在运行的服务器在迁移之前正在使用源密钥库,但在迁移之后应该使用目标密钥库,则必须将其重新配置为使用目标密钥环插件并重新启动。

  • 如果正在运行的服务器正在使用目标密钥库,并且将 continue 使用它,则应在迁移后重新启动它,以将所有迁移的密钥加载到目标密钥库中。

Note

MySQL 服务器密钥迁移模式支持暂停单个正在运行的服务器。如果多个密钥服务器正在使用所涉及的密钥库,则要执行密钥迁移,请使用以下过程:

  • 手动连接到每个正在运行的服务器,并设置keyring_operations=OFF

  • 使用迁移服务器执行脱机密钥迁移。

  • 手动连接到每个正在运行的服务器,并设置keyring_operations=ON

所有正在运行的服务器必须支持keyring_operations=ON系统变量。