Spec-Zone.ru › MySQL 8.4

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 как пользователю 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, не должны доверять никому вводимым пользователем данным и должны быть написаны с использованием надлежащих защитных методов программирования. См. Раздел 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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/security-guidelines.html

Spec-Zone.ru

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