8.1.1 Руководство по безопасности
Все пользователи MySQL на компьютере, подключенном к Интернету, должны прочитать этот раздел, чтобы избежать наиболее распространенных ошибок безопасности.
При обсуждении безопасности необходимо полностью защитить весь хост сервера (а не только сервер MySQL) от всех типов применимых атак: перехват, изменение, воспроизведение и отказ в обслуживании. Мы не рассматриваем здесь все аспекты доступности и отказоустойчивости.
MySQL использует безопасность на основе списков управления доступом (ACL) для всех подключений, запросов и других операций, которые пользователи могут попытаться выполнить. Также поддерживаются SSL-шифрованные подключения между клиентами MySQL и серверами. Многие из обсуждаемых здесь концепций вообще не специфичны для MySQL; те же общие идеи применяются практически ко всем приложениям.
При работе с MySQL следуйте этим рекомендациям:
Никогда не предоставляйте никому (кроме учетных записей MySQL
root) доступ к таблицеuserв системной базе данныхmysql! Это критически важно.-
Изучите, как работает система привилегий доступа MySQL (см. раздел 8.2, «Управление доступом и управление учетными записями»). Используйте команды
GRANTиREVOKEдля управления доступом к MySQL. Не предоставляйте больше привилегий, чем необходимо. Никогда не предоставляйте привилегии всем хостам.Список проверок:
Попробуйте
mysql -u root. Если вам удается успешно подключиться к серверу без запроса пароля, любой может подключиться к вашему серверу MySQL как пользователю MySQLrootс полными привилегиями! Пересмотрите инструкции по установке MySQL, уделяя особое внимание информации о настройке пароляroot. См. раздел 2.9.4, «Защита начальной учетной записи MySQL».Используйте команду
SHOW GRANTS, чтобы проверить, какие учетные записи имеют доступ к чему. Затем используйте командуREVOKE, чтобы удалить те привилегии, которые не нужны.
-
Не храните пароли в открытом виде в своей базе данных. Если ваш компьютер будет скомпрометирован, злоумышленник может получить полный список паролей и использовать их. Вместо этого используйте
SHA2()или какую-либо другую одностороннюю хеш-функцию и сохраняйте значение хэша.Чтобы предотвратить восстановление паролей с помощью радужных таблиц, не используйте эти функции для простого пароля; вместо этого выберите какую-либо строку, которая будет использоваться в качестве соли, и используйте значения hash(hash(пароль)+соль).
-
Предполагайте, что все пароли будут подвергнуты автоматическим попыткам взлома с использованием списков известных паролей, а также целенаправленным угадыванием с использованием общедоступной информации о вас, такой как записи в социальных сетях. Не выбирайте пароли, состоящие из легко взламываемых или угадываемых элементов, таких как слово из словаря, имя собственное, название спортивной команды, аббревиатура или общеизвестная фраза, особенно если они относятся к вам. Использование заглавных букв, подстановок и добавлений чисел, а также специальных символов не помогает, если они используются предсказуемым образом. Также не выбирайте любой пароль, который вы видели использованным в качестве примера где-либо, или его вариацию, даже если он был представлен в качестве примера сильного пароля.
Вместо этого выбирайте пароли, которые как можно длиннее и непредсказуемее. Это не означает, что комбинация должна быть случайной строкой символов, которую трудно запомнить и воспроизвести, хотя это хороший подход, если у вас, например, есть программное обеспечение для управления паролями, которое может генерировать и заполнять такие пароли и хранить их безопасно. Фраза, содержащая несколько слов, легко создается, запоминается и воспроизводится и намного безопаснее, чем типичный выбранный пользователем пароль, состоящий из одного изменённого слова или предсказуемой последовательности символов. Чтобы создать безопасную фразу, убедитесь, что слова и другие элементы в ней не являются известной фразой или цитатой, не следуют в предсказуемом порядке и, желательно, вообще не имеют никакого предыдущего отношения друг к другу.
-
Инвестируйте в межсетевой экран. Это защищает вас по меньшей мере от 50% всех типов эксплойтов в любом программном обеспечении. Разместите MySQL за межсетевым экраном или в демилитаризованной зоне (DMZ).
Список проверок:
-
Попробуйте просканировать свои порты из Интернета с помощью инструмента, такого как
nmap. MySQL по умолчанию использует порт 3306. Этот порт не должен быть доступен с недоверенных хостов. Как простой способ проверить, открыт ли ваш порт MySQL, попробуйте следующую команду с какого-либо удаленного компьютера, гдеserver_host— имя хоста или IP-адрес хоста, на котором работает ваш сервер MySQL:$>
telnetserver_host3306Если telnet зависает или подключение отказывается, порт заблокирован, что и нужно. Если вы получаете подключение и какие-то мусорные символы, порт открыт и должен быть закрыт на вашем межсетевом экране или маршрутизаторе, если у вас нет веских причин его оставлять открытым.
-
Приложения, которые обращаются к MySQL, не должны доверять никаким данным, введенным пользователями, и должны быть написаны с использованием надлежащих методов защитного программирования. См. раздел 8.1.7, «Руководство по безопасности клиентского программирования».
Не передавайте данные в открытом виде (без шифрования) через Интернет. Эта информация доступна каждому, у кого есть время и возможность перехватить ее и использовать в своих целях. Вместо этого используйте зашифрованный протокол, такой как SSL или SSH. MySQL поддерживает внутренние SSL-соединения. Другой метод — использовать SSH-туннелирование для создания зашифрованного (и сжатого) туннеля для связи.
-
Научитесь использовать утилиты tcpdump и strings. В большинстве случаев вы можете проверить, зашифрованы ли потоки данных MySQL, выполнив команду, аналогичную следующей:
$>
tcpdump -l -i eth0 -w - src or dst port 3306 | stringsЭто работает под Linux и должно работать с небольшими изменениями под другими системами.
ПредупреждениеЕсли вы не видите данных в открытом виде, это не всегда означает, что информация действительно зашифрована. Если вам нужна высокая безопасность, проконсультируйтесь с экспертом по безопасности.
© 2025 Oracle
Licensed under the GPLv2 License.