Spec-Zone.ru › MariaDB

Ключи шифрования InnoDB

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

Ключи шифрования

Каждый ключ шифрования имеет 32-битное целое число, которое служит идентификатором ключа.

Значение по умолчанию устанавливается с помощью системной переменной innodb_default_encryption_key_id.

Ключи шифрования также можно указать с помощью параметра таблицы ENCRYPTION_KEY_ID для таблиц, использующих табличные пространства file-per-table.

InnoDB шифрует временное табличное пространство с использованием ключа шифрования с идентификатором 1.

InnoDB шифрует журнал Redo с использованием ключа шифрования с идентификатором 1.

Ключи с вручную зашифрованными табличными пространствами

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

CREATE TABLE tab1 (
   id int PRIMARY KEY,
   str varchar(50)
) ENCRYPTED=YES ENCRYPTION_KEY_ID=100;

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 |
+----------+-------------------+----------------+

Если параметр таблицы ENCRYPTION_KEY_ID не задан для таблицы, использующей ручной метод включения шифрования, то она наследует значение из системной переменной innodb_default_encryption_key_id. Например:

SET SESSION innodb_default_encryption_key_id=100;

CREATE TABLE tab1 (
   id int PRIMARY KEY,
   str varchar(50)
) ENCRYPTED=YES;

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 |
+----------+-------------------+----------------+

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

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

SET GLOBAL innodb_encryption_threads=4;

SET GLOBAL innodb_encrypt_tables=ON;

SET SESSION innodb_default_encryption_key_id=100;

CREATE TABLE tab1 (
   id int PRIMARY KEY,
   str varchar(50)
);

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 |
+----------+-------------------+----------------+

Таблицы InnoDB, которые являются частью системного табличного пространства, могут быть зашифрованы только с использованием ключа шифрования, установленного системной переменной innodb_default_encryption_key_id.

Если таблица находится в табличном пространстве file-per-table, и если innodb_encrypt_tables установлено в значение ON или FORCE, и если innodb_encryption_threads установлено на значение больше, чем 0, то вы также можете установить конкретный ключ шифрования для таблицы, используя параметр таблицы ENCRYPTION_KEY_ID. Например:

SET GLOBAL innodb_encryption_threads=4;

SET GLOBAL innodb_encrypt_tables=ON;

CREATE TABLE tab1 (
   id int PRIMARY KEY,
   str varchar(50)
) ENCRYPTION_KEY_ID=100;

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 |
+----------+-------------------+----------------+

Однако, если innodb_encrypt_tables установлено в значение OFF или если innodb_encryption_threads установлено на значение 0, это не сработает. Для получения дополнительной информации см. Устранение неполадок с шифрованием InnoDB: Установка идентификатора ключа шифрования для незашифрованной таблицы.

Ротация ключей

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

Вы можете установить максимальный срок службы ключа шифрования, используя системную переменную innodb_encryption_rotate_key_age. Когда эта переменная установлена на ненулевое значение, фоновые потоки шифрования постоянно проверяют страницы, чтобы определить, зашифрована ли какая-либо страница ключом версии, которая слишком старая. Когда версия ключа слишком старая, любая страница, зашифрованная более старой версией ключа, автоматически перешифруется в фоновом режиме, чтобы использовать более новую версию ключа. Имейте в виду, что эта постоянная проверка иногда может привести к высокому использованию процессора.

Ротация ключей для журнала Redo InnoDB поддерживается только в MariaDB 10.4.0 и более поздних версиях. Для получения дополнительной информации см. MDEV-12041.

Для работы ротации ключей как служба управления ключами (KMS) на стороне сервера, так и соответствующий плагин управления ключами и шифрования должны поддерживать ротацию ключей. См. Управление ключами шифрования: Поддержка ротации ключей в плагинах шифрования, чтобы определить, какие плагины в настоящее время поддерживают ротацию ключей.

Отключение фоновых операций ротации ключей

В случае возникновения проблем с фоновым шифрованием вы можете отключить его, установив системную переменную innodb_encryption_rotate_key_age в значение 0. Это может быть полезно, когда постоянная проверка версий ключей приводит к чрезмерному использованию ЦП. Это также полезно в случаях, когда ваш плагин управления ключами шифрования не поддерживает ротацию ключей (например, с плагином file_key_management). Для получения дополнительной информации см. MDEV-14180.

Однако могут возникнуть проблемы при отключении фоновой ротации ключей.

Ожидающие операции шифрования

До MariaDB 10.2.24, MariaDB 10.3.15 и MariaDB 10.4.5, при обновлении значения системной переменной innodb_encrypt_tables InnoDB внутренне обрабатывает последующие фоновые операции по шифрованию и расшифровке табличных пространств как фоновую ротацию ключей. См. MDEV-14398 для получения дополнительной информации.

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

См. Фоновые потоки шифрования InnoDB: Проверка статуса фоновых операций для примеров запросов.

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

Для получения дополнительной информации см. MDEV-14398.

Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется заранее компанией 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/innodb-encryption-keys/

Spec-Zone.ru

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