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_userdb_nameother_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, чтобы пользователь MySQLrootмог войти и проверить активность сервера, даже если все обычные подключения заняты.Право
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.