Spec-Zone.ru › MySQL 9.2

8.1.3 Обеспечение безопасности MySQL от атак

При подключении к серверу MySQL следует использовать пароль. Пароль не передается в открытом виде по соединению.

Вся остальная информация передается как текст и может быть прочитана любым, кто может наблюдать за соединением. Если соединение между клиентом и сервером проходит через небезопасную сеть, и вас это беспокоит, вы можете использовать сжатый протокол, чтобы значительно затруднить расшифровку трафика. Вы также можете использовать встроенную поддержку SSL MySQL для повышения безопасности соединения. См. Раздел 8.3, «Использование шифрованных соединений». В качестве альтернативы, используйте SSH для получения шифрованного TCP/IP-соединения между сервером MySQL и клиентом MySQL. Вы можете найти клиент SSH с открытым исходным кодом на http://www.openssh.org/, а сравнение клиентов SSH с открытым исходным кодом и коммерческих клиентов SSH — на http://en.wikipedia.org/wiki/Comparison_of_SSH_clients.

Для повышения безопасности системы MySQL следует серьезно рассмотреть следующие рекомендации:

  • Требуйте, чтобы у всех учётных записей MySQL был пароль. Программа-клиент не обязательно знает личность пользователя, который её запускает. Для приложений клиент/сервер распространён случай, когда пользователь может указать любое имя пользователя программе-клиенту. Например, любой может использовать программу mysql для подключения как любой другой человек, просто вызвав её как mysql -u other_user db_name, если у other_user нет пароля. Если у всех учётных записей есть пароль, подключение с помощью учётной записи другого пользователя становится намного сложнее.

    Для обсуждения методов установки паролей см. Раздел 8.2.14, «Установка паролей для учётных записей».

  • Убедитесь, что единственная учётная запись пользователя Unix с правами чтения или записи в каталогах базы данных — это учётная запись, используемая для запуска mysqld.

  • Никогда не запускайте сервер MySQL как пользователя Unix root. Это чрезвычайно опасно, так как любой пользователь с правом доступа FILE может заставить сервер создавать файлы от имени root (например, ~root/.bashrc). Для предотвращения этого mysqld отказывается запускаться как root, если это не указано явно с помощью опции --user=root.

    mysqld (и следует) запускать как обычного, не имеющего привилегий пользователя. Вы можете создать отдельную учётную запись пользователя Unix под именем mysql для повышения безопасности. Используйте эту учётную запись только для администрирования MySQL. Чтобы запустить mysqld как другого пользователя Unix, добавьте опцию user, которая указывает имя пользователя в группе [mysqld] файла опций my.cnf, где вы указываете опции сервера. Например:

    [mysqld]
    user=mysql
    

    Это заставляет сервер запускаться как указанный пользователь, независимо от того, запускаете ли вы его вручную или с помощью mysqld_safe или mysql.server. Более подробную информацию см. в Разделе 8.1.5, «Как запустить MySQL как обычного пользователя».

    Запуск mysqld как пользователя Unix, отличного от root, не означает, что вам нужно изменить имя пользователя root в таблице user. Имена пользователей для учётных записей MySQL не имеют никакого отношения к именам пользователей для учётных записей Unix.

  • Не предоставляйте право FILE пользователям, не являющимся администраторами. Любой пользователь, обладающий этим правом, может записать файл в любое место файловой системы с правами демона mysqld. Это включает каталог данных сервера, содержащий файлы, которые реализуют таблицы привилегий. Для повышения безопасности операций с правом FILE, файлы, сгенерированные с помощью SELECT ... INTO OUTFILE, не перезаписывают существующие файлы и доступны для записи всем.

    Права FILE также могут использоваться для чтения любого файла, который доступен для чтения или для пользователя Unix, под которым работает сервер. С этим правом вы можете прочитать любой файл в таблицу базы данных. Это может быть злоупотреблено, например, с помощью LOAD DATA для загрузки /etc/passwd в таблицу, которую затем можно отобразить с помощью SELECT.

    Чтобы ограничить место, в котором могут читаться и записываться файлы, установите системную переменную secure_file_priv в определённый каталог. См. Раздел 7.1.8, «Системные переменные сервера».

  • Зашифруйте файлы журнала двоичных логов и файлов реле. Шифрование помогает защитить эти файлы и потенциально конфиденциальные данные в них от неправомерного использования внешними злоумышленниками, а также от несанкционированного просмотра пользователями операционной системы, где они хранятся. Вы включите шифрование на сервере MySQL, установив системную переменную binlog_encryption в значение ON. Дополнительную информацию см. в Разделе 19.3.2, «Шифрование файлов журнала двоичных логов и файлов реле».

  • Не предоставляйте права PROCESS или SUPER пользователям, не являющимся администраторами. Вывод mysqladmin processlist и SHOW PROCESSLIST показывает текст любого выполняемого в данный момент оператора, поэтому любой пользователь, которому разрешено просматривать список процессов сервера, может увидеть операторы, выпущенные другими пользователями.

    mysqld резервирует дополнительное подключение для пользователей, имеющих права CONNECTION_ADMIN или SUPER, чтобы пользователь MySQL root мог войти и проверить активность сервера, даже если все обычные подключения заняты.

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

  • Не допускайте использование символических ссылок на таблицы. (Эта возможность может быть отключена с помощью опции --skip-symbolic-links). Это особенно важно, если вы запускаете mysqld как root, так как любой, у кого есть права на запись в каталог данных сервера, может удалить любой файл в системе! См. Раздел 10.12.2.2, «Использование символических ссылок для таблиц MyISAM в Unix».

  • Программные модули и представления следует писать, используя рекомендации по безопасности, описанные в Разделе 27.7, «Управление доступом к хранимым объектам».

  • Если вы не доверяете своей DNS, используйте IP-адреса вместо имён хостов в таблицах предоставления прав. В любом случае, вы должны быть очень осторожны при создании записей в таблице предоставления прав, используя имена хостов, содержащие подстановочные знаки.

  • Если вы хотите ограничить количество подключений, разрешённых для одной учётной записи, вы можете сделать это, установив переменную max_user_connections в mysqld. Операторы CREATE USER и ALTER USER также поддерживают параметры управления ресурсами для ограничения объёма использования сервера, разрешённого учётной записи. См. Раздел 15.7.1.3, «Оператор CREATE USER», и Раздел 15.7.1.1, «Оператор ALTER USER».

  • Если каталог плагинов доступен для записи сервером, пользователь может записать исполняемый код в файл в каталоге с помощью SELECT ... INTO DUMPFILE. Это можно предотвратить, сделав plugin_dir только для чтения для сервера или установив secure_file_priv в каталог, где SELECT записи могут быть сделаны безопасно.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/security-against-attack.html

Spec-Zone.ru

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