10bet网址
MySQL的安全性
相关的文档10bet官方网站 下载此节选
PDF(美国高级主任)- 2.2 mb
PDF (A4)- 2.2 mb
HTML下载(TGZ)- 452.6 kb
HTML下载(Zip)- 459.8 kb


MySQL的安全性/.../ 在Keyring密钥存储库之间迁移密钥

6.4.13在Keyring密钥库之间迁移密钥

密匙环迁移将密钥从一个密钥存储库复制到另一个密钥存储库,使DBA能够将MySQL安装切换到不同的密钥存储库。一个成功的迁移操作会有这样的结果:

  • 目标密钥存储库包含迁移之前的密钥,以及来自源密钥存储库的密钥。

  • 源密钥存储库在迁移前后保持不变(因为密钥是复制的,而不是移动的)。

如果要复制的密钥已经存在于目标密钥存储库中,则会发生错误,并将目标密钥存储库恢复到迁移前的状态。

密匙环使用密匙环组件和密匙环插件管理密钥存储库。这与迁移策略有关,因为源密钥存储库和目标密钥存储库的管理方式决定了是否可以进行特定类型的密钥迁移以及执行该迁移的过程:

  • 从一个keyring插件迁移到另一个:MySQL服务器有一个提供此功能的操作模式。

  • 从一个密匙环插件迁移到一个密匙环组件:MySQL服务器从MySQL 8.0.24开始就有一个提供此功能的操作模式。

  • 从一个密匙环组件迁移到另一个密匙环组件mysql_migrate_keyring实用程序提供了这种功能。mysql_migrate_keyring从MySQL 8.0.24开始可用。

  • 从密匙环组件迁移到密匙环插件:没有提供此功能。

以下部分将讨论离线和在线迁移的特征,并描述如何执行迁移。

离线和在线密钥迁移

关键迁移可以离线,也可以在线:

  • 脱机迁移:当您确定本地主机上没有运行的服务器正在使用源或目标密钥存储库时使用。在这种情况下,迁移操作可以将密钥从源密钥存储库复制到目标,而不需要运行中的服务器在操作期间修改密钥存储库内容。

  • 在线迁移:当本地主机上运行的服务器正在使用源密钥存储库时使用。在这种情况下,必须注意防止该服务器在迁移期间更新密钥存储库。这涉及到连接到正在运行的服务器,并指示它暂停密匙环操作,以便可以安全地将密钥从源密钥存储库复制到目标。密钥复制完成后,允许运行的服务器恢复密匙环操作。

当您计划一个关键迁移时,使用以下几点来决定它应该离线还是在线:

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

  • 在在线迁移期间暂停密匙环操作是通过连接到正在运行的服务器并设置其全局来完成的keyring_operations系统变量为在复制密钥之前复制密钥后。这有几个含义:

    • keyring_operations是在MySQL 5.7.21中引入的,所以在线迁移是可能的,只有当运行的服务器是MySQL 5.7.21或更高版本时。如果正在运行的服务器较旧,则必须停止它,执行脱机迁移,然后重新启动它。的所有迁移指令keyring_operations都受此条件约束。

    • 用于连接运行中的服务器的帐户必须具有修改所需的权限keyring_operations.这些特权是ENCRYPTION_KEY_ADMIN除此之外SYSTEM_VARIABLES_ADMIN或者被弃用的超级特权。

    • 如果在线迁移操作异常退出(例如,被强制终止),则可能发生keyring_operations在运行的服务器上保持禁用状态,使其无法执行密匙环操作。在这种情况下,可能需要连接到正在运行的服务器并启用keyring_operations手动使用这个语句:

      SET GLOBAL keyring_operations = ON;
  • 在线密钥迁移可暂停单个运行服务器上的密匙环操作。若要执行迁移,如果多个正在运行的服务器正在使用涉及的密钥存储库,请使用中描述的过程涉及多台运行服务器的关键迁移

使用迁移服务器进行密钥迁移

如果以支持关键迁移的特殊操作模式调用MySQL服务器,则MySQL服务器将成为迁移服务器。迁移服务器不接受客户端连接。相反,它只运行足够长的时间来迁移键,然后退出。迁移服务器向控制台报告错误(标准错误输出)。

迁移服务器支持以下迁移类型:

  • 从一个keyring插件迁移到另一个。

  • 从密匙环插件迁移到密匙环组件。该功能在MySQL 8.0.24中可用。旧的服务器只支持从一个密匙环插件迁移到另一个,在这种情况下,这些指示中涉及密匙环组件的部分不适用。

迁移服务器不支持从一个密匙环组件迁移到另一个。有关这种类型的迁移,请参见使用mysql_migrate_keyring实用程序进行密钥迁移

若要使用迁移服务器执行密钥迁移操作,请确定所需的密钥迁移选项,以指定涉及哪些密匙环插件或组件,以及迁移是离线还是在线:

  • 要指定源密匙环插件和目标密匙环插件或组件,请指定以下选项:

    ——keyring-migration-source而且——keyring-migration-destination选项指示服务器应该以键迁移模式运行。对于关键的迁移操作,这两个选项都是必需的。每个插件或组件都使用其库文件的名称指定,包括任何特定于平台的扩展,例如所以. dll.源和目标必须不同,迁移服务器必须同时支持它们。

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

  • 对于在线迁移,一些正在运行的服务器当前正在使用源或目标密钥存储库。要调用迁移服务器,请指定指示如何连接到运行中的服务器的其他关键迁移选项。这是必需的,以便迁移服务器可以连接到正在运行的服务器,并告诉它在迁移操作期间暂停使用密匙环。

    使用下列选项之一表示在线迁移:

有关关键迁移选项的其他详细信息,请参见章节6.4.17,“密匙环命令选项”

使用关键迁移选项启动迁移服务器,这些选项指示源和目标密钥存储库,以及迁移是离线还是在线,也可以使用其他选项。请牢记以下几点:

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

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

  • 以键迁移方式调用服务器的用户不能是操作系统用户,除非——用户选项使用非指定以该用户身份运行服务器的用户名。

  • 在密钥迁移模式下运行的服务器用户必须具有读写任何本地keyring文件的权限,例如基于文件的插件的数据文件。

    如果从不同于通常用于运行MySQL的系统帐户调用迁移服务器,则可能会创建在正常操作期间服务器无法访问的密匙环目录或文件。假设mysqld通常以mysql操作系统用户,但是在登录时调用迁移服务器伊莎贝尔.由迁移服务器创建的任何新目录或文件都属于伊莎贝尔.时,后续启动失败mysql操作系统用户试图访问所属的文件系统对象伊莎贝尔

    要避免此问题,请以操作系统用户和提供——用户=user_name选项,user_name通常用于运行MySQL的系统帐号。或者,在迁移之后,检查与密匙环相关的文件系统对象,并在必要时更改它们的所有权和权限乔恩修改文件权限,或类似的命令,以便运行的服务器可以访问对象。

在两个keyring插件之间离线迁移的命令行示例(在单行上输入命令):

Mysqld——defaults-file=/usr/local/mysql/etc/my.cnf——keyring-migration-source=keyring_file。所以,keyring-migration-destination = keyring_encrypted_file。所以,keyring_encrypted_file_password =密码

在两个keyring插件之间进行在线迁移的示例命令行:

Mysqld——defaults-file=/usr/local/mysql/etc/my.cnf——keyring-migration-source=keyring_file。所以,keyring-migration-destination = keyring_encrypted_file。所以,keyring_encrypted_file_password =密码——keyring-migration-host=127.0.0.1——keyring-migration-user=root——keyring-migration-password=root_password

若要在目标是密匙环组件而不是密匙环插件时执行迁移,请指定——keyring-migration-to-component选项的值,并将该组件命名为——keyring-migration-destination选择。

从密匙环插件离线迁移到密匙环组件的命令行示例:

Mysqld——defaults-file=/usr/local/mysql/etc/my.cnf——keyring-migration-to-component——keyring-migration-source=keyring_file。所以,keyring-migration-destination = component_keyring_encrypted_file.so

注意,在这种情况下,没有keyring_encrypted_file_password值已指定。组件数据文件的密码在组件配置文件中列出。

从密匙环插件在线迁移到密匙环组件的示例命令行:

Mysqld——defaults-file=/usr/local/mysql/etc/my.cnf——keyring-migration-to-component——keyring-migration-source=keyring_file。所以,keyring-migration-destination = component_keyring_encrypted_file.so——keyring-migration-host=127.0.0.1——keyring-migration-user=root——keyring-migration-password=root_password

关键迁移服务器执行迁移操作如下:

  1. (仅限在线迁移)使用连接选项连接到运行中的服务器。

  2. (仅限在线迁移)禁用keyring_operations在运行的服务器上。

  3. 加载源和目标密钥存储库的密匙环插件/组件库。

  4. 将密钥从源密钥存储库复制到目标。

  5. 卸载源和目标密钥存储库的密匙环插件/组件库。

  6. (仅限在线迁移)启用keyring_operations在运行的服务器上。

  7. (仅限在线迁移)断开与运行中的服务器的连接。

如果在密钥迁移期间发生错误,则目标密钥存储库将恢复到迁移前的状态。

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

  • 如果正在运行的服务器在迁移之前使用源密钥存储库,并且应该在迁移之后继续使用它,那么在迁移之后不需要重新启动它。

  • 如果正在运行的服务器在迁移之前使用目标密钥存储库,并且应该在迁移之后继续使用它,那么应该在迁移之后重新启动它,以将所有迁移到目标密钥存储库中的密钥加载到目标密钥存储库中。

  • 如果正在运行的服务器在迁移之前使用源密钥存储库,但在迁移之后应该使用目标密钥存储库,则必须重新配置它以使用目标密钥存储库并重新启动。在这种情况下,请注意,尽管正在运行的服务器在迁移过程中暂停了对源密钥存储库的修改,但在迁移和后续重新启动之间的间隔期间,它不会暂停。应该注意,服务器在此期间不会修改源密钥存储库,因为任何此类更改都不会反映在目标密钥存储库中。

使用mysql_migrate_keyring实用程序进行密钥迁移

mysql_migrate_keyring实用程序将密钥从一个密匙环组件迁移到另一个。它不支持涉及密匙环插件的迁移。对于这种类型的迁移,使用运行在关键迁移模式下的MySQL服务器;看到使用迁移服务器进行密钥迁移

执行键迁移操作mysql_migrate_keyring,确定指定涉及哪些密匙环组件所需的关键迁移选项,以及迁移是离线还是在线:

  • 要指定源和目标密匙环组件及其位置,请指定以下选项:

    所有三个选项都是强制性的。每个密匙环组件名称都是一个组件库文件名,没有指定任何特定于平台的扩展名,例如所以. dll.例如,使用库文件所在的组件component_keyring_file.so,指定该选项为——source-keyring = component_keyring_file.源和目的必须不同,并且mysql_migrate_keyring必须同时支持他们。

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

  • 对于在线迁移,一些正在运行的服务器当前正在使用源或目标密钥存储库。在本例中,指定——在线迁移选项,表示在线迁移。此外,指定指示如何连接到运行中的服务器的连接选项,以便mysql_migrate_keyring可以连接到它,并告诉它在迁移操作期间暂停使用密匙环。

    ——在线迁移Option通常与连接选项一起使用,例如:

    • ——主机:运行服务器所在的主机。这总是本地主机,因为mysql_migrate_keyring只能在本地组件管理的密钥存储库之间迁移密钥。

    • ——用户——密码:用于连接到运行中的服务器的帐户凭据。

    • ——港口:对于TCP/IP连接,在运行的服务器上连接到的端口号。

    • ——套接字:对于Unix套接字文件或Windows命名管道连接,要连接到运行服务器上的套接字文件或命名管道。

有关所有可用选项的说明,请参见mysql_migrate_keyring - Keyring密钥迁移实用程序

开始mysql_migrate_keyring使用选项指示源和目标密钥存储库,以及迁移是离线还是在线,可能还使用其他选项。请牢记以下几点:

  • 调用的用户mysql_migrate_keyring一定不是操作系统用户。

  • 调用的用户mysql_migrate_keyring必须具有读写任何本地keyring文件的权限,例如基于文件的插件的数据文件。

    如果你调用mysql_migrate_keyring从一个不同于通常用于运行MySQL的系统帐户,它可能会创建密钥环目录或文件,在正常操作期间服务器无法访问。假设mysqld通常以mysql操作系统用户,但您调用mysql_migrate_keyring当以伊莎贝尔.创建的任何新目录或文件mysql_migrate_keyring属于伊莎贝尔.时,后续启动失败mysql操作系统用户试图访问所属的文件系统对象伊莎贝尔

    要避免此问题,请调用mysql_migrate_keyring随着mysql操作系统用户。或者,在迁移之后,检查与密匙环相关的文件系统对象,并在必要时更改它们的所有权和权限乔恩修改文件权限,或类似的命令,以便运行的服务器可以访问对象。

假设您想从component_keyring_filecomponent_keyring_encrypted_file,本地服务器将其keyring组件库文件存储在其中/usr/local/mysql/lib/plugin

如果没有正在运行的服务器正在使用密匙环,则允许脱机迁移。调用mysql_migrate_keyring如下所示(在单行中输入命令):

Mysql_migrate_keyring——component-dir=/usr/local/mysql/lib/plugin——source-keyring=component_keyring_file——destination-keyring=component_keyring_encrypted_file

如果正在运行的服务器正在使用密匙环,则必须执行在线迁移。在这种情况下,——在线迁移必须给出选项,以及指定连接到哪个服务器和使用的MySQL帐户所需的任何连接选项。

下面的命令执行在线迁移。它使用TCP/IP连接连接到本地服务器管理帐户。命令提示输入密码,在提示时输入密码:

Mysql_migrate_keyring——component-dir=/usr/local/mysql/lib/plugin——source-keyring=component_keyring_file——destination-keyring=component_keyring_encrypted_file——online-migration——host=127.0.0.1——user=admin——password

mysql_migrate_keyring执行如下迁移操作:

  1. (仅限在线迁移)使用连接选项连接到运行中的服务器。

  2. (仅限在线迁移)禁用keyring_operations在运行的服务器上。

  3. 加载源和目标密钥存储库的密匙环组件库。

  4. 将密钥从源密钥存储库复制到目标。

  5. 卸载源和目标密钥存储库的密匙环组件库。

  6. (仅限在线迁移)启用keyring_operations在运行的服务器上。

  7. (仅限在线迁移)断开与运行中的服务器的连接。

如果在密钥迁移期间发生错误,则目标密钥存储库将恢复到迁移前的状态。

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

  • 如果正在运行的服务器在迁移之前使用源密钥存储库,并且应该在迁移之后继续使用它,那么在迁移之后不需要重新启动它。

  • 如果正在运行的服务器在迁移之前使用目标密钥存储库,并且应该在迁移之后继续使用它,那么应该在迁移之后重新启动它,以将所有迁移到目标密钥存储库中的密钥加载到目标密钥存储库中。

  • 如果正在运行的服务器在迁移之前使用源密钥存储库,但在迁移之后应该使用目标密钥存储库,则必须重新配置它以使用目标密钥存储库并重新启动。在这种情况下,请注意,尽管正在运行的服务器在迁移过程中暂停了对源密钥存储库的修改,但在迁移和后续重新启动之间的间隔期间,它不会暂停。应该注意,服务器在此期间不会修改源密钥存储库,因为任何此类更改都不会反映在目标密钥存储库中。

涉及多台运行服务器的关键迁移

在线密钥迁移可暂停单个运行服务器上的密匙环操作。如果多个正在运行的服务器正在使用相关的密钥存储库,则执行迁移,请使用此过程:

  1. 手动连接到每个运行的服务器并设置keyring_operations =了.这确保没有运行中的服务器正在使用源或目标密钥存储库,并满足脱机迁移所需的条件。

  2. 使用迁移服务器或mysql_migrate_keyring为每个暂停的服务器执行脱机密钥迁移。

  3. 手动连接到每个运行的服务器并设置keyring_operations =对

所有运行的服务器必须支持keyring_operations系统变量。在迁移之前必须停止任何不这样做的服务器,在迁移之后重新启动。