Spec-Zone .ru
спецификации, руководства, описания, API
|
Любой MySQL использования на компьютере, соединенном с Интернетом, должен считать этот раздел, чтобы избежать наиболее распространенных ошибок безопасности.
В обсуждении безопасности необходимо рассмотреть полностью защищение всего узла сервера (не только сервер MySQL) против всех типов применимых атак: подслушивание, изменение, воспроизведение, и отказ службы. Мы не покрываем все аспекты доступности и отказоустойчивости здесь.
MySQL использует безопасность, основанную на Списках управления доступом (ACLs) для всех соединений, запросов, и других операций, которые пользователи могут попытаться выполнить. Есть также поддержка зашифрованных SSL соединений между клиентами и серверами MySQL. Многие из понятий, обсужденных здесь, не являются определенными для MySQL вообще; те же самые общие представления применяются к почти всем приложениям.
Когда рабочий MySQL, следуйте за этими направляющими линиями:
Никогда не давайте никому (кроме MySQL root
учетные записи) доступ к user
таблица в
mysql
база данных! Это является критическим.
Изучите, как система права доступа MySQL работает (см. Раздел
6.2, "MySQL Access Privilege System"). Используйте GRANT
и REVOKE
операторы, чтобы управлять доступом к MySQL. Не предоставляйте
больше полномочий чем необходимый. Никогда не предоставляйте полномочия всем узлам.
Контрольный список:
Попробовать mysql -u root
. Если Вы в
состоянии соединиться успешно с сервером, не попросившись относительно пароля, любой может
соединиться с Вашим сервером MySQL как MySQL root
пользователь
с полными полномочиями! Рассмотрите инструкции по установке MySQL, обращая особое внимание
на информацию об установке a root
пароль. См. Раздел
2.10.2, "Защищая Учетные записи MySQL Initial".
Используйте SHOW GRANTS
оператор, чтобы проверить, у каких учетных
записей есть доступ к какой. Затем используйте REVOKE
оператор, чтобы удалить те полномочия, которые не
необходимы.
Не храните пароли в виде открытого текста в своей базе данных. Если Ваш компьютер
становится поставившим под угрозу, злоумышленник может взять полный список паролей и использовать их.
Вместо этого используйте SHA2()
,
SHA1()
, MD5()
, или
некоторая другая односторонняя хеш-функция и хранилище значение хэш-функции.
Не выбирайте пароли из словарей. Специальные программы существуют, чтобы повредить пароли. Даже пароли как "xfish98" очень плохи. Намного лучше "duag98", который содержит то же самое слово "рыба", но вводил один ключ налево на стандартной клавиатуре QWERTY. Другой метод должен использовать пароль, который берется от первых символов каждого слова в предложении (например, "Четыре выигрывают и семь лет назад" результаты в пароле "Fsasya"). Пароль легко помнить и ввести, но трудный предположить для кого-то, кто не знает предложение. В этом случае можно дополнительно заменить цифрами слова числа, чтобы получить фразу "4 счета и 7 лет назад", приводя к паролю "4sa7ya", который еще более трудно предположить.
Вложите капитал в брандмауэр. Это защищает, Вы по крайней мере от 50 % всех типов используете в любом программном обеспечении. Помещенный MySQL позади брандмауэра или в демилитаризированной зоне (DMZ).
Контрольный список:
Попытайтесь отсканировать свои порты из Интернета, используя инструмент
такой как nmap
. MySQL использует порт 3306 по умолчанию. Этот
порт не должен быть доступным от недоверяемых узлов. Как простой способ проверить, открыт ли
Ваш порт MySQL, попробуйте следующую команду от некоторой удаленной машины, где server_host
имя хоста или IP-адрес узла, на
котором работает Ваш сервер MySQL:
shell> telnet server_host
3306
Если telnet зависает, или соединению отказывают, порт блокируется, который является, как Вы хотите, чтобы это было. Если Вы получаете соединение и некоторые ошибочные символы, порт открыт, и должен быть закрыт на Вашем брандмауэре или маршрутизаторе, если у Вас действительно нет серьезного основания сохранить это открытым.
Приложения, что MySQL доступа не должен доверять никаким данным, вводимым пользователями, и должен быть записан, используя надлежащие методы безопасного программирования. См. Раздел 6.1.7, "Клиент, Программирующий Направляющие линии Безопасности".
Не передавайте плоскость (незашифрованные) данные по Интернету. Эта информация доступна для всех, у кого есть время и возможность прервать ее и использовать ее в их собственных целях. Вместо этого используйте зашифрованный протокол, такой как SSL или SSH. MySQL поддерживает внутренние соединения SSL. Другой метод должен использовать перенаправление портов SSH, чтобы создать зашифрованный (и сжатый) туннель для передачи.
Учитесь использовать tcpdump, и представляет утилиты в виде строки. В большинстве случаев можно проверить, нешифруются ли потоки данных MySQL, давая команду как следующее:
shell> tcpdump -l -i eth0 -w - src or dst
port 3306 | strings
Это работает под Linux и должно работать с маленькими модификациями под другими системами.
Если Вы не видите данные открытого текста, это не всегда означает, что информация фактически шифруется. Если Вы нуждаетесь в высокой степени безопасности, консультируйтесь со специалистом по безопасности.