Spec-Zone.ru › MySQL 9.2

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-9.2-en/security-guidelines.html

Spec-Zone.ru

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