Spec-Zone.ru › MySQL 5.7

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 в качестве пользователя MySQL root со всеми привилегиями! Пересмотрите инструкции по установке MySQL, уделяя особое внимание информации о настройке пароля root. См. Раздел 2.9.4, «Защита начальной учетной записи MySQL».

    • Используйте оператор SHOW GRANTS, чтобы проверить, какие учетные записи имеют доступ к чему. Затем используйте оператор REVOKE, чтобы удалить те привилегии, которые не являются необходимыми.

  • Не храните пароли в открытом тексте в вашей базе данных. Если ваш компьютер будет взломан, злоумышленник может получить полный список паролей и использовать их. Вместо этого используйте SHA2() или какую-либо другую одностороннюю хеш-функцию и храните значение хэша.

    Чтобы предотвратить восстановление паролей с помощью радужных таблиц, не используйте эти функции для простого пароля; вместо этого выберите некоторую строку, которая будет использоваться в качестве соли, и используйте значения hash(hash(пароль)+соль).

  • Предполагайте, что все пароли будут подвергаться автоматическим попыткам взлома с использованием списков известных паролей, а также целенаправленным угадыванием с использованием общедоступной информации о вас, такой как публикации в социальных сетях. Не выбирайте пароли, состоящие из легко взламываемых или угадываемых элементов, таких как слово из словаря, собственное имя, название спортивной команды, аббревиатура или общеизвестная фраза, особенно если они связаны с вами. Использование прописных букв, замещение и добавление цифр, а также специальные символы не помогают, если они используются предсказуемыми способами. Также не выбирайте пароли, которые вы видели в качестве примера где-либо, или их вариации, даже если они были представлены в качестве примера надежного пароля.

    Вместо этого выбирайте пароли, которые были бы максимально длинными и непредсказуемыми. Это не означает, что комбинация должна быть случайной строкой символов, которую трудно запомнить и воспроизвести, хотя это хороший подход, если у вас, например, есть программное обеспечение для управления паролями, которое может генерировать и заполнять такие пароли и хранить их безопасно. Фраза-пароль, содержащая несколько слов, легко создается, запоминается и воспроизводится и является намного более надежной, чем типичный выбранный пользователем пароль, состоящий из одного измененного слова или предсказуемой последовательности символов. Чтобы создать надежную фразу-пароль, убедитесь, что слова и другие элементы в ней не являются известной фразой или цитатой, не встречаются в предсказуемом порядке и, желательно, вообще не имеют никакой предшествующей связи друг с другом.

  • Инвестируйте в брандмауэр. Это защищает вас по крайней мере от 50% всех типов эксплойтов в любом программном обеспечении. Разместите MySQL за брандмауэром или в демилитаризованной зоне (DMZ).

    Список проверок:

    • Попробуйте сканировать свои порты из Интернета с помощью инструмента, такого как nmap. MySQL по умолчанию использует порт 3306. Этот порт не должен быть доступен с недоверенных хостов. В качестве простого способа проверки доступности вашего порта MySQL, попробуйте следующую команду с удаленного компьютера, где server_host — имя хоста или IP-адрес хоста, на котором работает ваш сервер MySQL:

      $> telnet server_host 3306
      

      Если 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/security-guidelines.html

Spec-Zone.ru

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