Spec-Zone.ru › MySQL 8.4

8.4.4.11 Миграция ключей между хранилищами ключей keyring

Миграция ключей keyring копирует ключи из одного хранилища ключей в другое, что позволяет DBA переключить установку MySQL на другое хранилище ключей. Успешная операция миграции приводит к следующему:

  • Хранилище назначения содержит ключи, которые оно имело до миграции, плюс ключи из исходного хранилища.

  • Исходное хранилище остается неизменным до и после миграции (поскольку ключи копируются, а не перемещаются).

Если ключ, подлежащий копированию, уже существует в хранилище назначения, возникает ошибка, и хранилище назначения восстанавливается до состояния до миграции.

Keyring управляет хранилищами ключей с помощью компонентов keyring и плагинов keyring. Это относится к стратегии миграции, поскольку способ управления исходным и целевым хранилищами ключей определяет процедуру выполнения данного типа миграции ключей:

  • Миграция из одного плагина keyring в другой: сервер MySQL имеет режим работы, который предоставляет эту возможность.

  • Миграция из плагина keyring в компонент keyring: сервер MySQL имеет режим работы, который предоставляет эту возможность.

  • Миграция из одного компонента keyring в другой: утилита mysql_migrate_keyring предоставляет эту возможность.

  • Миграция из компонента keyring в плагин keyring: сервер MySQL имеет режим работы, который предоставляет эту возможность.

В следующих разделах обсуждаются особенности автономных и онлайн-миграций и описывается, как выполнить миграции.

  • Автономные и онлайн-миграции ключей

  • Миграция ключей с использованием сервера миграции

  • Миграция ключей с использованием утилиты mysql_migrate_keyring

  • Миграция ключей, включающая несколько работающих серверов

Автономные и онлайн-миграции ключей

Миграция ключей может быть автономной или онлайн:

  • Автономная миграция: Используется, когда вы уверены, что ни один работающий сервер на локальном хосте не использует исходное или целевое хранилище ключей. В этом случае операция миграции может копировать ключи из исходного хранилища в целевое без возможности изменения содержимого хранилища ключей работающим сервером во время операции.

  • Онлайн-миграция: Используется, когда работающий сервер на локальном хосте использует исходное хранилище ключей. В этом случае необходимо позаботиться о том, чтобы этот сервер не обновлял хранилища ключей во время миграции. Это включает подключение к работающему серверу и указание ему приостановить операции keyring, чтобы ключи могли быть безопасно скопированы из исходного хранилища в целевое. После завершения копирования ключей работающий сервер разрешается возобновить операции keyring.

При планировании миграции ключей используйте эти моменты, чтобы решить, должна ли она быть автономной или онлайн:

  • Не выполняйте автономную миграцию, включающую хранилище ключей, которое используется работающим сервером.

  • Приостановление операций keyring во время онлайн-миграции выполняется путем подключения к работающему серверу и установки его глобальной переменной системы keyring_operations на значение OFF до копирования ключей и ON после копирования ключей. Это имеет несколько последствий:

    • keyring_operations был введен в MySQL 5.7.21, поэтому онлайн-миграция возможна только в том случае, если работающий сервер относится к MySQL 5.7.21 или более поздней версии. Если работающий сервер более ранней версии, его необходимо остановить, выполнить автономную миграцию и перезапустить.

    • Аккаунт, используемый для подключения к работающему серверу, должен обладать правами, необходимыми для изменения keyring_operations. Эти права - ENCRYPTION_KEY_ADMIN в дополнение к либо SYSTEM_VARIABLES_ADMIN, либо устаревшему SUPER праву.

    • Если операция онлайн-миграции завершается аномально (например, если она была принудительно прервана), возможно, что keyring_operations останется отключенным на работающем сервере, что сделает его неспособным выполнять операции keyring. В этом случае может потребоваться подключиться к работающему серверу и вручную включить keyring_operations с помощью этого оператора:

      SET GLOBAL keyring_operations = ON;
      
  • Онлайн-миграция ключей позволяет приостановить операции keyring на одном работающем сервере. Для выполнения миграции, если несколько работающих серверов используют участвующие хранилища ключей, используйте процедуру, описанную в разделе Миграция ключей, включающая несколько работающих серверов.

Миграция ключей с помощью сервера миграции
Примечание

Онлайновая миграция ключей с помощью сервера миграции поддерживается только в том случае, если работающий сервер допускает подключения через сокеты или TCP/IP-соединения с использованием TLS; она не поддерживается, например, когда сервер работает на платформе Windows и допускает только подключения через общую память.

Сервер MySQL становится сервером миграции, если запущен в специальном режиме, поддерживающем миграцию ключей. Сервер миграции не принимает подключения клиентов. Вместо этого он работает только достаточно долго, чтобы мигрировать ключи, а затем завершается. Сервер миграции сообщает об ошибках в консоль (стандартный вывод ошибок).

Сервер миграции поддерживает следующие типы миграции:

  • Миграция из одного плагина ключей в другой.

  • Миграция из плагина ключей в компонент ключей.

  • Миграция из компонента ключей в плагин ключей.

Сервер миграции не поддерживает миграцию из одного компонента ключей в другой. Для этого типа миграции см. Миграция ключей с помощью утилиты mysql_migrate_keyring.

Для выполнения операции миграции ключей с помощью сервера миграции определите параметры миграции ключей, необходимые для указания участвующих плагинов или компонентов ключей, а также является ли миграция оффлайн или онлайн:

  • Для указания исходного плагина ключей и целевого плагина или компонента ключей укажите следующие параметры:

    • --keyring-migration-source: Исходный компонент или плагин ключей, управляющий ключами, подлежащими миграции.

    • --keyring-migration-destination: Целевой плагин или компонент ключей, в который будут скопированы мигрированные ключи.

    • --keyring-migration-to-component: Этот параметр требуется, если целевой объект — компонент ключей.

    • --keyring-migration-from-component: Этот параметр требуется, если исходный объект — компонент ключей.

    Параметры --keyring-migration-source и --keyring-migration-destination указывают серверу, что он должен работать в режиме миграции ключей. Для операций миграции ключей оба параметра обязательны. Каждый плагин или компонент указывается с использованием имени его библиотечного файла, включая любые платформозависимые расширения, такие как .so или .dll. Источник и назначение должны отличаться, и сервер миграции должен поддерживать их оба.

  • Для оффлайн-миграции дополнительных параметров миграции ключей не требуется.

  • Для онлайн-миграции в настоящий момент некоторый работающий сервер использует исходное или целевое хранилище ключей. Для запуска сервера миграции необходимо указать дополнительные параметры миграции ключей, указывающие, как подключиться к работающему серверу. Это необходимо, чтобы сервер миграции мог подключиться к работающему серверу и сказать ему приостановить использование ключей во время операции миграции.

    Использование любого из следующих параметров означает онлайн-миграцию:

    • --keyring-migration-host: Хост, где расположен работающий сервер. Это всегда локальный хост, потому что сервер миграции может мигрировать ключи только между хранилищами ключей, управляемыми локальными плагинами и компонентами.

    • --keyring-migration-user, --keyring-migration-password: Учетные данные для подключения к работающему серверу.

    • --keyring-migration-port: Для TCP/IP-соединений — номер порта для подключения к работающему серверу.

    • --keyring-migration-socket: Для подключений через файлы сокетов Unix или именованные каналы Windows — файл сокета или именованный канал для подключения к работающему серверу.

Дополнительную информацию о параметрах миграции ключей см. в разделе 8.4.4.15 «Параметры командной строки для keyring».

Запустите сервер миграции с параметрами миграции ключей, указывающими исходное и целевое хранилища ключей и тип миграции (оффлайн или онлайн), а также, возможно, другими параметрами. Имейте в виду следующие моменты:

  • Возможно, потребуются другие параметры сервера; также могут потребоваться и другие параметры, не относящиеся к keyring. Один из способов указать эти параметры — использовать --defaults-file для указания файла параметров, содержащего необходимые параметры.

  • Сервер миграции ожидает, что значения параметров имени пути будут полными путями. Относительные имена путей могут быть разрешены не так, как ожидается.

  • Пользователь, запускающий сервер в режиме миграции ключей, не должен быть системным пользователем root операционной системы, если не указан параметр --user с именем пользователя, отличным от root, для запуска сервера от имени этого пользователя.

  • Пользователь, от имени которого выполняется сервер в режиме миграции ключей, должен иметь разрешения на чтение и запись любых локальных файлов keyring, таких как файл данных для плагина на основе файла.

    Если вы запускаете сервер миграции от имени системной учетной записи, отличной от той, которая обычно используется для запуска MySQL, он может создать каталоги или файлы keyring, недоступные серверу во время обычной работы. Предположим, что mysqld обычно запускается от имени системного пользователя mysql, но вы запускаете сервер миграции, вошедший под учетной записью isabel. Все новые каталоги и файлы, созданные сервером миграции, будут принадлежать пользователю isabel. Последующий запуск завершается ошибкой, когда сервер, запущенный от имени системного пользователя mysql, пытается получить доступ к объектам файловой системы, принадлежащим пользователю isabel.

    Чтобы избежать этой проблемы, запустите сервер миграции от имени системного пользователя root и укажите параметр --user=user_name, где user_name — системная учетная запись, обычно используемая для запуска MySQL. В качестве альтернативы после миграции проверьте объекты файловой системы, относящиеся к keyring, и измените их владение и разрешения, если необходимо, с помощью команд chown, chmod или аналогичных команд, чтобы объекты были доступны работающему серверу.

Пример командной строки для оффлайн-миграции между двумя плагинами keyring (введите команду в одну строку):

mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
  --keyring-migration-source=keyring_okv.so
  --keyring-migration-destination=keyring_aws.so

Пример командной строки для онлайн-миграции между двумя плагинами keyring:

mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
  --keyring-migration-source=keyring_okv.so
  --keyring-migration-destination=keyring_aws.so
  --keyring-migration-host=127.0.0.1
  --keyring-migration-user=root
  --keyring-migration-password=root_password

Для выполнения миграции, когда целью является компонент keyring, а не плагин keyring, укажите параметр --keyring-migration-to-component, и имя компонента в качестве значения параметра --keyring-migration-destination.

Пример командной строки для оффлайн-миграции от плагина keyring к компоненту keyring:

mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
  --keyring-migration-to-component
  --keyring-migration-source=keyring_okv.so
  --keyring-migration-destination=component_keyring_encrypted_file.so

Обратите внимание, что в этом случае значение keyring_encrypted_file_password не указано. Пароль для файла данных компонента указан в файле конфигурации компонента.

Пример командной строки для онлайн-миграции от плагина keyring к компоненту keyring:

mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
  --keyring-migration-to-component
  --keyring-migration-source=keyring_okv.so
  --keyring-migration-destination=component_keyring_encrypted_file.so
  --keyring-migration-host=127.0.0.1
  --keyring-migration-user=root
  --keyring-migration-password=root_password

Для выполнения миграции, когда источником является компонент keyring, а не плагин keyring, укажите параметр --keyring-migration-from-component, и имя компонента в качестве значения параметра --keyring-migration-source.

Пример командной строки для оффлайн-миграции от компонента keyring к плагину keyring:

mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
  --keyring-migration-from-component
  --keyring-migration-source=component_keyring_file.so
  --keyring-migration-destination=keyring_okv.so
  --keyring-okv-conf-dir=/usr/local/mysql/mysql-keyring-okv

Пример командной строки для онлайн-миграции от компонента keyring к плагину keyring:

mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
  --keyring-migration-from-component
  --keyring-migration-source=component_keyring_file.so
  --keyring-migration-destination=keyring_okv.so
  --keyring-okv-conf-dir=/usr/local/mysql/mysql-keyring-okv
  --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, определите необходимые параметры миграции ключей, чтобы указать, какие компоненты хранилища ключей участвуют, и является ли миграция автономной или онлайн:

  • Для указания исходного и целевого компонентов хранилища ключей и их расположения, укажите следующие параметры:

    • --source-keyring: Исходный компонент хранилища ключей, управляющий ключами, которые необходимо мигрировать.

    • --destination-keyring: Целевой компонент хранилища ключей, в который будут скопированы мигрированные ключи.

    • --component-dir: Каталог, содержащий файлы библиотеки компонентов хранилища ключей. Как правило, это значение системной переменной plugin_dir для локального сервера MySQL.

    Все три параметра обязательны. Каждое имя компонента хранилища ключей — это имя файла библиотеки компонента, указанное без каких-либо платформозависимых расширений, таких как .so или .dll. Например, для использования компонента, для которого файлом библиотеки является component_keyring_file.so, укажите параметр как --source-keyring=component_keyring_file. Исходный и целевой компоненты должны быть разными, и mysql_migrate_keyring должен их оба поддерживать.

  • Для автономной миграции дополнительных параметров не требуется.

  • Для онлайн-миграции некоторые работающие серверы в настоящее время используют исходный или целевой хранилище ключей. В этом случае укажите параметр --online-migration, чтобы указать онлайн-миграцию. Кроме того, укажите параметры подключения, указывающие, как подключиться к работающему серверу, чтобы mysql_migrate_keyring мог подключиться к нему и приостановить использование хранилища ключей во время операции миграции.

    Параметр --online-migration обычно используется совместно с параметрами подключения, такими как:

    • --host: Хост, на котором находится работающий сервер. Это всегда локальный хост, потому что mysql_migrate_keyring может мигрировать ключи только между хранилищами ключей, управляемыми локальными компонентами.

    • --user, --password: Учетные данные учетной записи для подключения к работающему серверу.

    • --port: Для подключений TCP/IP — номер порта для подключения к работающему серверу.

    • --socket: Для подключений по Unix-сокету или именованным трубам Windows — файл сокета или именованная труба для подключения к работающему серверу.

Описание всех доступных параметров см. в Разделе 6.6.8, «mysql_migrate_keyring — Утилита миграции ключей хранилища ключей».

Запустите mysql_migrate_keyring с параметрами, указывающими исходные и целевые хранилища ключей и тип миграции (оффлайн или онлайн), а также другими возможными параметрами. Имейте в виду следующие моменты:

  • Пользователь, вызывающий mysql_migrate_keyring, не должен быть пользователем операционной системы root.

  • Пользователь, вызывающий mysql_migrate_keyring, должен иметь права чтения и записи во все локальные файлы хранилища ключей, такие как файл данных для плагина на основе файла.

    Если вы вызываете mysql_migrate_keyring от имени системной учетной записи, отличной от той, которая обычно используется для запуска MySQL, он может создать каталоги или файлы хранилища ключей, недоступные для сервера во время обычной работы. Предположим, что mysqld обычно запускается от имени пользователя операционной системы mysql, но вы вызываете mysql_migrate_keyring, будучи авторизованным как isabel. Любые новые каталоги или файлы, созданные mysql_migrate_keyring, будут принадлежать пользователю isabel. Последующий запуск завершается ошибкой, когда сервер, запущенный как пользователь операционной системы mysql, пытается получить доступ к объектам файловой системы, принадлежащим isabel.

    Чтобы избежать этой проблемы, вызовите mysql_migrate_keyring как пользователя операционной системы mysql. В качестве альтернативы, после миграции проверьте объекты файловой системы, связанные с хранилищем ключей, и измените их владение и разрешения при необходимости, используя команды chown, chmod или аналогичные команды, чтобы объекты были доступны для работающего сервера.

Предположим, что вы хотите мигрировать ключи из component_keyring_file в component_keyring_encrypted_file, и что локальный сервер хранит файлы библиотеки компонентов хранилища ключей в /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

Если работающий сервер использует хранилище ключей, необходимо выполнить онлайн-миграцию. В этом случае должен быть указан параметр --online-migration, а также любые параметры подключения, необходимые для указания сервера для подключения и учетной записи MySQL для использования.

Следующая команда выполняет онлайн-миграцию. Она подключается к локальному серверу с помощью TCP/IP-соединения и учетной записи admin. Команда запросит пароль, который вы должны ввести при запросе:

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=OFF. Это гарантирует, что ни один работающий сервер не использует исходное или целевое хранилище ключей и удовлетворяет необходимому условию для офлайн-миграции.

  2. Используйте сервер миграции или mysql_migrate_keyring для выполнения офлайн-миграции ключей для каждого приостановленного сервера.

  3. Подключитесь к каждому работающему серверу вручную и установите keyring_operations=ON.

Все работающие серверы должны поддерживать переменную системы keyring_operations. Любой сервер, который этого не делает, должен быть остановлен перед миграцией и перезапущен после нее.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/keyring-key-migration.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API