Обзор шифрования InnoDB
MariaDB поддерживает шифрование данных в состоянии покоя для таблиц, использующих движки хранения InnoDB. При включенном шифровании сервер шифрует данные при записи в файловую систему и расшифровывает данные при чтении из неё. Вы можете настроить шифрование InnoDB для автоматического шифрования всех новых таблиц InnoDB или указать шифрование на уровне таблицы.
Для шифрования данных с помощью движка хранения Aria см. Шифрование данных для Aria.
Основные настройки
Для использования шифрования данных в состоянии покоя необходимо сначала настроить плагин управления ключами шифрования, такой как плагин file_key_management или aws_key_management. MariaDB использует этот плагин для хранения, извлечения и управления различными ключами, используемыми при шифровании данных при записи в файловую систему и дешифровании при чтении из неё.
После настройки плагина необходимо установить несколько дополнительных системных переменных для включения шифрования таблиц InnoDB и XtraDB, включая innodb_encrypt_tables, innodb_encrypt_logs, innodb_encryption_threads, и innodb_encryption_rotate_key_age.
[mariadb] ... # File Key Management plugin_load_add = file_key_management file_key_management_filename = /etc/mysql/encryption/keyfile.enc file_key_management_filekey = FILE:/etc/mysql/encryption/keyfile.key file_key_management_encryption_algorithm = AES_CTR # InnoDB/XtraDB Encryption innodb_encrypt_tables = ON innodb_encrypt_temporary_tables = ON innodb_encrypt_log = ON innodb_encryption_threads = 4 innodb_encryption_rotate_key_age = 1
Дополнительную информацию о системных переменных для шифрования и других функциях см. на странице системных переменных InnoDB system variables.
Поиск зашифрованных таблиц
При использовании шифрования данных в состоянии покоя с движками хранения InnoDB или XtraDB не обязательно шифровать каждую таблицу в вашей базе данных. Вы можете проверить, какие таблицы зашифрованы, а какие нет, запросив таблицу INNODB_TABLESPACES_ENCRYPTION в Information Schema. Эта таблица содержит информацию о том, какие табличные пространства зашифрованы, с каким ключом шифрования зашифровано каждое табличное пространство и работают ли в данный момент фоновые потоки шифрования над табличным пространством. Поскольку системное табличное пространство также может содержать таблицы, может быть полезно объединить таблицу INNODB_TABLESPACES_ENCRYPTION с таблицей INNODB_SYS_TABLES для определения статуса шифрования каждой отдельной таблицы, а не каждого табличного пространства. Например:
SELECT st.SPACE, st.NAME, te.ENCRYPTION_SCHEME, te.ROTATING_OR_FLUSHING
FROM information_schema.INNODB_TABLESPACES_ENCRYPTION te
JOIN information_schema.INNODB_SYS_TABLES st
ON te.SPACE = st.SPACE \G
*************************** 1. row ***************************
SPACE: 0
NAME: SYS_DATAFILES
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 2. row ***************************
SPACE: 0
NAME: SYS_FOREIGN
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 3. row ***************************
SPACE: 0
NAME: SYS_FOREIGN_COLS
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 4. row ***************************
SPACE: 0
NAME: SYS_TABLESPACES
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 5. row ***************************
SPACE: 0
NAME: SYS_VIRTUAL
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 6. row ***************************
SPACE: 0
NAME: db1/default_encrypted_tab1
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 7. row ***************************
SPACE: 416
NAME: db1/default_encrypted_tab2
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 8. row ***************************
SPACE: 402
NAME: db1/tab
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 9. row ***************************
SPACE: 185
NAME: db1/tab1
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 10. row ***************************
SPACE: 184
NAME: db1/tab2
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 11. row ***************************
SPACE: 414
NAME: db1/testgb2
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 12. row ***************************
SPACE: 4
NAME: mysql/gtid_slave_pos
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 13. row ***************************
SPACE: 2
NAME: mysql/innodb_index_stats
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 14. row ***************************
SPACE: 1
NAME: mysql/innodb_table_stats
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
*************************** 15. row ***************************
SPACE: 3
NAME: mysql/transaction_registry
ENCRYPTION_SCHEME: 1
ROTATING_OR_FLUSHING: 0
15 rows in set (0.000 sec)
Журналы обратной записи
При использовании шифрования данных в состоянии покоя с InnoDB, системная переменная innodb_encrypt_tables шифрует только табличные пространства InnoDB. Для шифрования журналов обратной записи InnoDB также необходимо установить системную переменную innodb_encrypt_logs.
Начиная с MariaDB 10.4, где плагин управления ключами шифрования поддерживает ротацию ключей, журнал обратной записи InnoDB также может изменять ключи шифрования. В предыдущих версиях журнал обратной записи мог использовать только первый ключ шифрования.
См. также
© 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-overview/