Spec-Zone.ru › MySQL 5.7

14.14 Шифрование данных InnoDB при хранении на диске

InnoDB поддерживает шифрование данных при хранении на диске для табличных пространств.

  • Обзор шифрования данных при хранении на диске

  • Предварительные условия для шифрования

  • Включение/выключение шифрования табличного пространства на основе файла на таблицу

  • Вращение главного ключа

  • Шифрование и восстановление

  • Экспорт зашифрованных табличных пространств

  • Шифрование и репликация

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

  • Примечания к использованию шифрования

  • Ограничения шифрования

Обзор шифрования данных при хранении на диске

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

Функция шифрования данных при хранении на диске полагается на плагин keyring для управления главным ключом шифрования.

Все редакции MySQL предоставляют плагин keyring_file, который хранит данные keyring в файле, локальном для хоста сервера.

MySQL Enterprise Edition предлагает дополнительные плагины keyring:

  • keyring_encrypted_file: Хранит данные keyring в зашифрованном файле с защитой паролем, локальном для хоста сервера.

  • keyring_okv: Плагин KMIP 1.1 для использования с продуктами хранения ключей back-end, совместимыми с KMIP. Поддерживаемые совместимые с KMIP продукты включают централизованные решения управления ключами, такие как Oracle Key Vault, Gemalto KeySecure, Thales Vormetric key management server и Fornetix Key Orchestration.

  • keyring_aws: Связывается с Amazon Web Services Key Management Service (AWS KMS) в качестве back-end для генерации ключей и использует локальный файл для хранения ключей.

Предупреждение

Для управления ключами шифрования плагины keyring_file и keyring_encrypted_file не предназначены в качестве решения для соответствия нормативным требованиям. Стандарты безопасности, такие как PCI, FIPS и другие, требуют использования систем управления ключами для обеспечения безопасности, управления и защиты ключей шифрования в хранилищах ключей или модулях аппаратной безопасности (HSM).

Безопасное и надёжное решение для управления ключами шифрования имеет решающее значение для безопасности и соответствия различным стандартам безопасности. Когда функция шифрования данных при хранении на диске использует централизованное решение управления ключами, функция называется “Прозрачное шифрование данных MySQL Enterprise (TDE)”.

Функция шифрования данных при хранении на диске поддерживает алгоритм блочного шифрования Advanced Encryption Standard (AES). Она использует режим блочного шифрования Electronic Codebook (ECB) для шифрования ключа табличного пространства и режим блочного шифрования Cipher Block Chaining (CBC) для шифрования данных.

Для часто задаваемых вопросов о функции шифрования данных при хранении на диске см. Раздел A.17, «MySQL 5.7 FAQ: InnoDB Шифрование данных InnoDB при хранении на диске».

Предварительные условия для шифрования

  • Должен быть установлен и настроен плагин keyring. Установка плагина keyring выполняется при запуске с помощью параметра early-plugin-load. Ранняя загрузка гарантирует доступность плагина до инициализации файловой системы хранения InnoDB. Инструкции по установке и настройке плагина keyring см. в разделе 6.4.4, «MySQL Keyring».

    Одновременно должен быть активирован только один плагин keyring. Включение нескольких плагинов keyring не поддерживается и может привести к непредсказуемым результатам.

    Важно

    После создания зашифрованных табличных пространств в экземпляре MySQL, плагин keyring, который был загружен при создании зашифрованного табличного пространства, должен продолжать загружаться при запуске с помощью параметра early-plugin-load. Отсутствие этого действия приводит к ошибкам при запуске сервера и во время восстановления InnoDB.

    Для проверки активности плагина keyring используйте оператор SHOW PLUGINS или запросите таблицу схемы информации PLUGINS. Например:

    mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
           FROM INFORMATION_SCHEMA.PLUGINS
           WHERE PLUGIN_NAME LIKE 'keyring%';
    +--------------+---------------+
    | PLUGIN_NAME  | PLUGIN_STATUS |
    +--------------+---------------+
    | keyring_file | ACTIVE        |
    +--------------+---------------+
    
  • При шифровании производственных данных необходимо принять меры для предотвращения потери главного ключа шифрования. Если главный ключ шифрования утерян, данные, хранящиеся в зашифрованных файлах табличного пространства, невозможно восстановить. Если вы используете плагин keyring_file или keyring_encrypted_file, создайте резервную копию файла данных keyring сразу после создания первого зашифрованного табличного пространства, перед вращением главного ключа и после вращения главного ключа. Параметр конфигурации keyring_file_data определяет расположение файла данных keyring для плагина keyring_file. Параметр конфигурации keyring_encrypted_file_data определяет расположение файла данных keyring для плагина keyring_encrypted_file. Если вы используете плагин keyring_okv или keyring_aws, убедитесь, что выполнена необходимая настройка. Инструкции см. в разделе 6.4.4, «MySQL Keyring».

Включение/выключение шифрования табличного пространства на основе файла на таблицу

Для включения шифрования для нового табличного пространства на основе файла на таблицу укажите параметр ENCRYPTION в операторе CREATE TABLE. В примере предполагается, что параметр innodb_file_per_table включен.

mysql> CREATE TABLE t1 (c1 INT) ENCRYPTION='Y';

Для включения шифрования для существующего табличного пространства на основе файла на таблицу укажите параметр ENCRYPTION в операторе ALTER TABLE.

mysql> ALTER TABLE t1 ENCRYPTION='Y';

Для отключения шифрования табличного пространства на основе файла на таблицу, установите ENCRYPTION='N' с помощью оператора ALTER TABLE.

mysql> ALTER TABLE t1 ENCRYPTION='N';

Вращение главного ключа

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

Вращение главного ключа — это атомарная операция на уровне экземпляра. Каждый раз, когда вращается главный ключ шифрования, все ключи табличных пространств в экземпляре MySQL перешифровываются и сохраняются обратно в соответствующие заголовки табличных пространств. Как атомарная операция, перешифровка должна быть успешной для всех ключей табличных пространств после инициации операции вращения. Если операция вращения главного ключа прерывается сбоем сервера, InnoDB продолжит операцию при перезапуске сервера. Подробнее см. в разделе Шифрование и восстановление.

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

Для вращения главного ключа шифрования требуется привилегия SUPER.

Для вращения главного ключа шифрования выполните:

mysql> ALTER INSTANCE ROTATE INNODB MASTER KEY;

ALTER INSTANCE ROTATE INNODB MASTER KEY поддерживает одновременные DML-операции. Однако его нельзя выполнять одновременно с операциями шифрования табличных пространств, и блокировки используются для предотвращения конфликтов, которые могут возникнуть при одновременном выполнении. Если операция ALTER INSTANCE ROTATE INNODB MASTER KEY выполняется, она должна завершиться, прежде чем сможет начаться операция шифрования табличного пространства, и наоборот.

Шифрование и восстановление

Если во время операции шифрования произойдёт сбой сервера, операция будет продолжена при перезапуске сервера.

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

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

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

Экспорт зашифрованных табличных пространств

При экспорте зашифрованного табличного пространства, InnoDB генерирует ключ переноса, который используется для шифрования ключа табличного пространства. Зашифрованный ключ табличного пространства и ключ переноса хранятся в файле tablespace_name.cfp. Этот файл вместе с зашифрованным файлом табличного пространства необходим для выполнения операции импорта. При импорте InnoDB использует ключ переноса для расшифровки ключа табличного пространства в файле tablespace_name.cfp. Для получения дополнительной информации см. Раздел 14.6.1.3, «Импорт таблиц InnoDB».

Шифрование и репликация

  • Оператор ALTER INSTANCE ROTATE INNODB MASTER KEY поддерживается только в средах репликации, где источник и реплики работают с версией MySQL, поддерживающей шифрование данных в состоянии покоя.

  • Успешные операторы ALTER INSTANCE ROTATE INNODB MASTER KEY записываются в двоичный журнал для репликации на репликах.

  • Если оператор ALTER INSTANCE ROTATE INNODB MASTER KEY терпит неудачу, он не записывается в двоичный журнал и не реплицируется на репликах.

  • Репликация операции ALTER INSTANCE ROTATE INNODB MASTER KEY терпит неудачу, если плагин keyring установлен на источнике, но не на реплике.

  • Если плагин keyring_file или keyring_encrypted_file установлен как на источнике, так и на реплике, но на реплике отсутствует файл данных keyring, выполняемый оператор ALTER INSTANCE ROTATE INNODB MASTER KEY создаёт файл данных keyring на реплике, при условии, что данные файла keyring не кэшированы в памяти. ALTER INSTANCE ROTATE INNODB MASTER KEY использует данные файла keyring, кэшированные в памяти, если они доступны.

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

Когда опция ENCRYPTION указана в операторе CREATE TABLE или ALTER TABLE, она записывается в столбец CREATE_OPTIONS таблицы Информационной Схемы TABLES. Этот столбец можно запросить для идентификации таблиц, которые находятся в зашифрованных табличных пространствах с файлом на таблицу.

mysql> SELECT TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES
       WHERE CREATE_OPTIONS LIKE '%ENCRYPTION%';
+--------------+------------+----------------+
| TABLE_SCHEMA | TABLE_NAME | CREATE_OPTIONS |
+--------------+------------+----------------+
| test         | t1         | ENCRYPTION="Y" |
+--------------+------------+----------------+

Запросите таблицу INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES, чтобы получить информацию о табличном пространстве, связанном со схемой и таблицей.

mysql> SELECT SPACE, NAME, SPACE_TYPE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME='test/t1';
+-------+---------+------------+
| SPACE | NAME    | SPACE_TYPE |
+-------+---------+------------+
|     3 | test/t1 | Single     |
+-------+---------+------------+

Примечания по использованию шифрования

  • Планируйте изменения при изменении существующего табличного пространства с опцией ENCRYPTION. Таблица перестраивается с использованием алгоритма COPY. Алгоритм INPLACE не поддерживается.

  • Если сервер завершается или останавливается во время нормальной работы, рекомендуется перезапустить сервер с теми же настройками шифрования, которые были настроены ранее.

  • Первый главный ключ шифрования генерируется при шифровании первого нового или существующего табличного пространства.

  • Сменой главного ключа повторно зашифровываются ключи табличных пространств, но не изменяется сам ключ табличного пространства. Чтобы изменить ключ табличного пространства, необходимо отключить и снова включить шифрование, что является ALGORITHM=COPY операцией, которая перестраивает таблицу.

  • Если таблица создана с опциями COMPRESSION и ENCRYPTION, сжатие выполняется перед шифрованием данных табличного пространства.

  • Если файл данных keyring (файл, названный keyring_file_data или keyring_encrypted_file_data) пуст или отсутствует, первое выполнение ALTER INSTANCE ROTATE INNODB MASTER KEY создаёт главный ключ шифрования.

  • Удаление плагина keyring_file или keyring_encrypted_file не удаляет существующий файл данных keyring.

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

  • Изменение настроек keyring_file_data или keyring_encrypted_file_data во время работы или при перезапуске сервера может привести к тому, что ранее зашифрованные табличные пространства станут недоступными, что приведёт к потере данных.

Ограничения шифрования

  • Стандарт шифрования AES (Advanced Encryption Standard) — единственный поддерживаемый алгоритм шифрования. InnoDB шифрование данных в состоянии покоя использует режим блочного шифрования Electronic Codebook (ECB) для шифрования ключа табличного пространства и режим блочного шифрования Cipher Block Chaining (CBC) для шифрования данных. Заполнение не используется в режиме блочного шифрования CBC. Вместо этого, InnoDB гарантирует, что текст, который необходимо зашифровать, является кратным размеру блока.

  • Изменение атрибута ENCRYPTION таблицы выполняется с использованием алгоритма COPY. Алгоритм INPLACE не поддерживается.

  • Шифрование поддерживается только для табличных пространств. Шифрование не поддерживается для других типов табличных пространств, включая и .

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

  • Шифрование применяется только к данным в табличном пространстве. Данные не шифруются в журнале редо, журнале андо или двоичном журнале.

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

  • Шифрование не поддерживается для таблиц индексов InnoDB FULLTEXT, которые создаются неявно при добавлении индекса FULLTEXT. Для получения дополнительной информации см. Таблицы InnoDB полнотекстового индекса.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-data-encryption.html

Spec-Zone.ru

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