6.1.1 Руководство по безопасности
Всем, кто использует MySQL на компьютере, подключенном к Интернету, следует прочитать этот раздел, чтобы избежать наиболее распространенных ошибок безопасности.
При обсуждении безопасности необходимо полностью защитить весь хост сервера (а не только сервер MySQL) от всех типов применимых атак: перехвата, изменения, воспроизведения и отказа в обслуживании. Мы не рассматриваем здесь все аспекты доступности и отказоустойчивости.
MySQL использует безопасность на основе списков управления доступом (ACL) для всех подключений, запросов и других операций, которые пользователи могут пытаться выполнить. Также поддерживаются SSL-шифрованные соединения между клиентами и серверами MySQL. Многие из обсуждаемых здесь концепций не специфичны для MySQL вообще; те же общие идеи применимы практически ко всем приложениям.
При работе с MySQL следуйте этим рекомендациям:
Никогда не предоставляйте никому (кроме учетных записей MySQL
root) доступ к таблицеuserв базе данных системыmysql! Это критически важно.-
Изучите, как работает система привилегий доступа MySQL (см. Раздел 6.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, не должны доверять никаким данным, введенным пользователями, и должны быть написаны с использованием надлежащих защитных методик программирования. См. Раздел 6.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.