Spec-Zone.ru › MariaDB

Отключение шифрования InnoDB

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

Для безопасного отключения шифрования необходимо сначала расшифровать табличные пространства и журнал Redo, а затем отключить системные переменные. Конкретика этого процесса зависит от того, используете ли вы автоматическое или ручное шифрование табличных пространств InnoDB.

Отключение шифрования для автоматически зашифрованных табличных пространств

Когда для табличного пространства InnoDB установлено значение опции таблицы ENCRYPTED в DEFAULT и системная переменная innodb_encrypt_tables установлена в ON или FORCE, шифрование табличного пространства автоматически управляется фоновыми потоками шифрования. При желании отключить шифрование для этих табличных пространств необходимо убедиться, что фоновые потоки шифрования расшифровали табличные пространства до удаления ключей шифрования. В противном случае табличное пространство остается зашифрованным и становится недоступным после удаления ключей.

Для безопасной расшифровки табличных пространств сначала установите системную переменную innodb_encrypt_tables в OFF.

SET GLOBAL innodb_encrypt_tables = OFF;

Затем установите системную переменную innodb_encryption_threads в ненулевое значение:

SET GLOBAL innodb_encryption_threads = 4;

Далее установите системную переменную innodb_encryption_rotate_key_age в 1.

SET GLOBAL innodb_encryption_rotate_key_age = 1;

После установки все табличные пространства InnoDB, для которых опция таблицы ENCRYPTED имеет значение DEFAULT, будут расшифрованы в фоновом режиме фоновыми потоками шифрования InnoDB.

Статус расшифровки

Вы можете проверить статус процесса расшифровки, используя таблицу INNODB_TABLESPACES_ENCRYPTION в базе данных information_schema.

SELECT COUNT(*) AS "Number of Encrypted Tablespaces"
FROM information_schema.INNODB_TABLESPACES_ENCRYPTION
WHERE ENCRYPTION_SCHEME != 0
   OR ROTATING_OR_FLUSHING != 0; 

Этот запрос показывает количество табличных пространств InnoDB, которые в настоящее время используют фоновые потоки шифрования. После того как счетчик достигнет 0, все ваши табличные пространства InnoDB не будут зашифрованы. Не забудьте также отключить шифрование журнала Redo и хранилища Aria перед удалением настроек управления ключами шифрования из файла конфигурации.

Отключение шифрования для вручную зашифрованных табличных пространств

В случае вручную зашифрованных табличных пространств InnoDB (т.е. тех, где опция таблицы ENCRYPTED имеет значение YES), необходимо выполнить оператор ALTER TABLE для расшифровки каждого табличного пространства перед удалением ключей шифрования. В противном случае табличное пространство остается зашифрованным и становится недоступным без ключей.

Сначала запросите таблицу TABLES схемы информации, чтобы найти зашифрованные таблицы. Это можно сделать с помощью WHERE в качестве условия фильтрации столбца CREATE_OPTIONS.

SELECT TABLE_SCHEMA AS "Database", TABLE_NAME AS "Table"
FROM information_schema.TABLES
WHERE ENGINE='InnoDB' 
      AND CREATE_OPTIONS LIKE '%`ENCRYPTED`=YES%';

Для каждой таблицы в наборе результатов выполните оператор ALTER TABLE и установите опцию таблицы ENCRYPTED в NO.

SELECT NAME, ENCRYPTION_SCHEME, CURRENT_KEY_ID
FROM information_schema.INNODB_TABLESPACES_ENCRYPTION
WHERE NAME='db1/tab1';
+----------+-------------------+----------------+
| NAME     | ENCRYPTION_SCHEME | CURRENT_KEY_ID |
+----------+-------------------+----------------+
| db1/tab1 |                 1 |            100 |
+----------+-------------------+----------------+

ALTER TABLE tab1
   ENCRYPTED=NO;

SELECT NAME, ENCRYPTION_SCHEME, CURRENT_KEY_ID
FROM information_schema.INNODB_TABLESPACES_ENCRYPTION
WHERE NAME='db1/tab1';
+----------+-------------------+----------------+
| NAME     | ENCRYPTION_SCHEME | CURRENT_KEY_ID |
+----------+-------------------+----------------+
| db1/tab1 |                 0 |            100 |
+----------+-------------------+----------------+

После удаления шифрования со всех таблиц ваше развертывание InnoDB не будет зашифровано. Не забудьте также отключить шифрование журнала Redo, а также Aria и других хранилищ, поддерживающих шифрование, перед удалением настроек управления ключами шифрования из файла конфигурации.

InnoDB не допускает ручных изменений шифрования для таблиц в табличном пространстве system с помощью ALTER TABLE. Шифрование табличного пространства system можно настроить только путем установки значения системной переменной innodb_encrypt_tables. Это означает, что при желании зашифровать или расшифровать табличное пространство system, вы также должны установить ненулевое значение для системной переменной innodb_encryption_threads и установить системную переменную innodb_system_rotate_key_age в 1, чтобы убедиться, что табличное пространство системы правильно зашифровано или расшифровано фоновыми потоками. Дополнительную информацию см. в MDEV-14398.

Отключение шифрования для временных табличных пространств

Системная переменная innodb_encrypt_temporary_tables управляет настройкой шифрования для временного табличного пространства temporary tablespace. Для отключения удалите системную переменную из файла конфигурации сервера option file и перезапустите сервер.

Отключение шифрования для журнала Redo

InnoDB использует журнал Redo при восстановлении после сбоя. По умолчанию эти события записываются в файл в незашифрованном состоянии. При удалении шифрования данных в состоянии покоя для InnoDB необходимо также отключить шифрование для журнала Redo перед удалением настроек ключей шифрования. В противном случае журнал Redo может стать недоступным без ключей шифрования.

Сначала проверьте значение системной переменной innodb_fast_shutdown с помощью оператора SHOW VARIABLES. Например:

SHOW VARIABLES LIKE 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| innodb_fast_shutdown |     2 |
+----------------------+-------+

Если значение установлено в 2, InnoDB выполнит некорректное завершение работы, поэтому ему потребуется журнал Redo при следующем запуске сервера. Убедитесь, что переменная установлена в 0, 1, или 3. По соображениям производительности 1 обычно является лучшим вариантом. Его можно изменить динамически с помощью SET GLOBAL. Например:

SET GLOBAL innodb_fast_shutdown = 1;

Затем установите системную переменную innodb_encrypt_log в OFF в группе опций сервера в файле конфигурации option group в файле конфигурации. После этого перезапустите сервер MariaDB. После возвращения сервера в онлайн-режим он начинает запись незашифрованных данных в журнал Redo.

См. также

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

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/disabling-innodb-encryption/

Spec-Zone.ru

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