Ключи шифрования 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.
© 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/