Spec-Zone.ru › MySQL 5.7

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

При подключении к серверу MySQL необходимо использовать пароль. Пароль не передаётся в открытом виде по подключению. Обработка паролей во время последовательности подключения клиента была улучшена в MySQL 4.1.1 для повышения безопасности. Если вы всё ещё используете пароли в стиле до 4.1.1, алгоритм шифрования не такой надёжный, как новый алгоритм. При определённых усилиях хитрый злоумышленник, который может перехватывать трафик между клиентом и сервером, может взломать пароль. (См. раздел 6.1.2.4 «Хэширование паролей в MySQL» для обсуждения различных методов обработки паролей.)

Вся остальная информация передаётся как текст и может быть прочитана любым, кто способен наблюдать за подключением. Если подключение между клиентом и сервером проходит через ненадежную сеть, и вы обеспокоены этим, вы можете использовать сжатый протокол, чтобы сделать трафик намного сложнее расшифровать. Вы также можете использовать встроенную поддержку SSL в MySQL для повышения безопасности подключения. См. раздел 6.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 нет пароля. Если у всех учётных записей есть пароль, подключение с использованием учётной записи другого пользователя становится намного сложнее.

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

  • Убедиться, что единственная учётная запись 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. Более подробную информацию см. в разделе 6.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 в определённый каталог. См. раздел 5.1.7 «Системные переменные сервера».

  • Не предоставляйте право PROCESS или SUPER пользователям, не являющимся администраторами. Вывод mysqladmin processlist и SHOW PROCESSLIST отображает текст любых выполняемых в настоящее время инструкций, поэтому любой пользователь, которому разрешено видеть список процессов сервера, может увидеть инструкции, выпущенные другими пользователями, такими как UPDATE user SET password=PASSWORD('not_secure').

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

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

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

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

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

  • Если вы хотите ограничить количество подключений, разрешённых для одной учётной записи, вы можете сделать это, установив переменную max_user_connections в mysqld. Операции CREATE USER и ALTER USER также поддерживают параметры управления ресурсами для ограничения объёма использования сервера, разрешённого учётной записи. См. раздел 13.7.1.2 «Оператор CREATE USER» и раздел 13.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-5.7-en/security-against-attack.html

Spec-Zone.ru

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