Spec-Zone.ru › MySQL 8.4

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.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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/security-against-attack.html

Spec-Zone.ru

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