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.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.