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_userdb_nameother_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, так что пользователь MySQLrootможет войти и проверить активность сервера, даже если все обычные подключения заняты.Привилегия
SUPERможет использоваться для завершения подключений клиентов, изменения работы сервера путём изменения значения системных переменных и управления репликационными серверами. Не разрешайте использование символьных ссылок на таблицы. (Эта возможность может быть отключена с помощью опции
--skip-symbolic-links). Это особенно важно, если вы запускаете mysqld в качествеroot, потому что любой, у кого есть доступ для записи в каталог данных сервера, может удалить любой файл в системе! См. раздел 10.12.2.2, «Использование символьных ссылок для таблиц MyISAM в Unix».Хранящиеся программы и представления должны быть написаны с использованием руководящих принципов безопасности, обсуждаемых в разделе 27.6, «Управление доступом к хранимым объектам».
Если вы не доверяете своим 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.