Вопрос или проблема
У меня такая же проблема, как описано пользователем nerdgeekdork здесь:
MySQL keyring component (not plugin) not loading on server startup
Я пытался настроить компонент так же, как описано в документации mySQL:
https://dev.mysql.com/doc/refman/8.0/en/innodb-data-encryption.html
https://dev.mysql.com/doc/refman/8.0/en/keyring-component-installation.html
и
https://dev.mysql.com/doc/refman/8.0/en/keyring-file-component.html
В итоге, были настроены следующие параметры:
файл mysqld.my
создан в /usr/sbin/
с root:mysql 0640
Этот файл содержит следующее:
{ "components": "file://component_keyring_file" }
Затем в /usr/lib/mysql/plugin
у меня есть файл component_keyring_file.cnf
с root:mysql 0640
, который содержит
{ "path": "/usr/local/mysql/keyring/component_keyring_file", "read_only": false }
Наконец, в /usr/local/mysql/keyring/
находится файл component_keyring_file
с root:mysql 0660
.
После перезапуска mySQL и входа в командную строку mySQL как root, при выполнении команды SELECT * FROM performance_schema.keyring_component_status;
я получаю пустое множество.
Вот версии Ubuntu и mySQL:
Ubuntu 20.04.4 LTS mysql Ver 8.0.30-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))
Любая помощь будет оценена.
Это был AppArmor!
MySQL использовал профиль принудительного применения AppArmor, который не позволял MySQL вносить изменения в component_keyring_file, так как он не находился в месте по умолчанию “/var/lib/mysql-keyring/”, используемом профилем AppArmor для MySQL.
Сначала проблему удалось решить в рамках устранения неисправностей, изменив профиль MySQL в режим жалоб (sudo aa-complain /usr/sbin/mysqld). Окончательное решение состояло в обновлении профиля MySQL для использования указанного мной пути и загрузке его, например, с помощью команды cat /etc/apparmor.d/usr.sbin.mysqld | sudo apparmor_parser -a.
В моем случае apparmor блокировал файл манифеста в /usr/sbin/mysqld.my. Я добавил:
# Разрешить чтение файла манифеста keyring /usr/sbin/mysqld.my r,
в конфигурационный файл профиля apparmor mysql в /etc/apparmor.d/usr.sbin.mysqld
Попробуйте отключить selinux.
setenforce 0
Ответ или решение
Конфигурация компонента MySQL Keyring может вызвать множество вопросов, особенно если она не загружается при запуске сервера. Это часто связано с ошибками в конфигурации, ограничениями на уровне операционной системы или проблемами с доступом к файлам. Рассмотрим основные аспекты настройки компонента MySQL Keyring, учитывая предоставленный вами контекст и выявленные проблемы.
Теоретическая часть (Theory):
MySQL Keyring — это компонент, который используется для управления шифровальными ключами на сервере MySQL. Он нужен, чтобы хранить и извлекать ключи в безопасном виде, что особенно важно для функций шифрования на уровне приложения, таких как шифрование данных в InnoDB. Компонент Keyring может хранить ключи в различных хранилищах, включая файловую систему. Чтобы использовать этот компонент, нужно обеспечить корректную настройку манифестов компонентов и конфигурационных файлов, а также уделить внимание вопросам безопасности, таким как разрешения и ограничения AppArmor или SELinux.
Практическая часть (Example):
Вы описали, что создали файл конфигурации /usr/sbin/mysqld.my
с правильными правами доступа и настроили компонент Keyring в нем. Также были настроены файлы в /usr/lib/mysql/plugin
и /usr/local/mysql/keyring/
. Однако после перезапуска MySQL и выполнения запроса SELECT * FROM performance_schema.keyring_component_status;
вы получили пустое множество результатов. Проблема заключалась в том, что AppArmor, система контроля доступа, блокировала доступ MySQL к файлам из-за их нестандартного расположения.
Поэтому вы обновили профиль MySQL в AppArmor, добавив разрешения на чтение необходимых файлов. Это решение позволило обойти ограничения AppArmor и заставить компонент работать корректно.
Применение решения (Application):
-
Настройка прав: Убедитесь, что все файлы, связанные с компонентом Keyring, имеют правильные права доступа и владельца. Это предотвратит возможные проблемы с безопасностью и доступом.
-
AppArmor и SELinux: Если на вашем сервере активен AppArmor, обновите его профиль, чтобы включить разрешения для всех новых путей, связанных с Keyring. Следующий фрагмент конфигурации AppArmor может помочь:
# Allow keyring manifest read file /usr/sbin/mysqld.my r,
Если используется SELinux, временно отключите его с помощью команды
setenforce 0
, чтобы проверить, не он ли является источником проблемы. Если это так, настройте правильные правила SELinux. -
Проверка конфигурации: Убедитесь, что все файлы конфигурации имеют правильный синтаксис JSON и расположены в ожидаемых MySQL местах. Проверьте сопутствующую документацию на сайте MySQL на предмет последних изменений или дополнительных требований.
-
Логи: Внимательно изучите логи MySQL на предмет ошибок при запуске, связанных с Keyring. Это может дать более точную информацию о природе проблемы.
-
Обновление системы: Убедитесь, что ваш дистрибутив Ubuntu и версия MySQL обновлены. Обновления безопасности и совместимости могут решить многие проблемы, связанные с компонентами и плагинами.
При грамотном подходе к настройке и устранении проблем с компонентом MySQL Keyring, вы сможете эффективно использовать его в ваших проектах. Главное — учитывать все особенности системы безопасности и конфигурации операционной среды.