Полномочия пользователя
Знание — сила. Поэтому необходимо хорошо понимать особенности работы системы полномочий MySQL и последствия выдачи конкретных полномочий. Ни одному пользователю не следует предоставлять больше полномочий, чем ему требуется. Эти полномочия необходимо проверять, просматривая таблицы полномочий.
В частности, не выдавайте полномочия PROCESS, FILE, SHUTDOWN и RELOAD ни одному пользователю кроме администратора, если только это не абсолютно необходимо. Полномочия PROCESS могут быть использованы для слежения за тем, что делают и вводят другие пользователи, в том числе за вводом паролей. Полномочия FILE позволяют считывать и записывать файлы операционной системы (в числе которых, например, файл /etc/password в системе Unix).
Полномочия GRANT также должны предоставляться с осторожностью, поскольку они разрешают пользователям делиться своими полномочиями с другими.
При определении пользователей предоставляйте им доступ только из тех хостов, с которых они будут подключаться к базе данных. Если у вас есть пользователь jane@localhost — это прекрасно, но просто jane — достаточно распространенное имя, и пользователь с таким именем может входить в систему откуда угодно — при этом проверить аутентичность jane не представляется возможным. По аналогичным причинам следует избегать применения групповых символов в именах хостов.
Безопасность можно еще больше увеличить, если указывать в таблице host IP-адреса, а не имена доменов. Это позволяет избежать проблем, связанных с ошибками ввода или атаками на сервер DNS. Данный подход можно реализовать, запустив демон MySQL с параметром - -skip-name-resolve, который означает, что все значения столбца хоста должны быть либо IP-адресами, либо именем локального узла.
Следует также запретить пользователям, которые не являются администраторами, доступ к программе mysqladmin на Web-сервере. Поскольку эта программа запускается из командной строки, наличие доступа к ней по существу означает наличие полномочий доступа к операционной системе.