MySQL — одна из самых популярных систем управления реляционными базами данных, которая является джек-потом для злоумышленников, пытающихся проникнуть в базы данных. Недавно установленный сервер базы данных MySQL может иметь множество уязвимостей и лазеек. Поскольку безопасность данных имеет большое значение, необходимо понимать каждый аспект безопасности MySQL.
Эта статья посвящена аудиту и безопасности вашей базы данных MySQL и предлагает девять советов по усилению ее безопасности.
1. Избегайте ненужных грантов привилегий
MySQL разрешает несколько операторов привилегий, которые при ненужном назначении непривилегированному пользователю могут привести к чтению/записи файлов и нарушению других привилегий пользователя. Некоторыми из наиболее потенциально опасных операторов привилегий являются FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN и так далее. Вы можете узнать больше об этом из официальной документации MySQL. Следовательно, не назначайте привилегии суперпользователя, такие как FILE, GRANT, SUPER и PROCESS, неадминистративным учетным записям. Вы можете отозвать эти ненужные глобальные разрешения, разрешения на уровне базы данных и таблицы следующим образом:
ОТМЕНИТЬ ВСЕ НА *.* FROM 'user_name'@'host_name'; #Глобальные привилегии
ОТМЕНИТЬ СОЗДАНИЕ, УДАЛИТЬ имя_базы_данных.* FROM 'user_name'@'host_name'; #Привилегии базы данных
REVOKE INSERT, UPDATE, DELETE ON имя_базы_данных.имя_таблицы FROM 'user_name'@'host_name'; #Таблица привилегий
сброс привилегий;
2. Ограничить удаленный вход в систему
Удаленный доступ облегчает работу администраторов баз данных, но подвергает сервер риску потенциальных уязвимостей и эксплойтов. Вы можете отключить удаленный доступ для всех типов учетных записей пользователей MySQl, добавив переменную skip-networking в основной файл конфигурации и перезапустив службу.
[mysqld]
пропуск сети
перезапуск службы sudo mysql
Точно так же вы должны отключить доступ к учетной записи root, если не все, чтобы ограничить удаленный вход в учетную запись root. Эта мера предосторожности предотвращает взлом корневой учетной записи MySQL.
mysql> удалить из mysql.user, где user='root' и host not in ('localhost', '127.0.0.1', '::1'); mysql> сброс привилегий;
3. Отключить функции (load_file, outfile, dumpfile)
Еще одна мера предосторожности для защиты MySQL от внедрения локальных файлов заключается в отключении функций, доступных только через привилегию FILE Grant. ФАЙЛ — это параметр, который позволяет пользователям с низким уровнем привилегий с глобальными параметрами команд читать или записывать файлы на сервере.
- load_file
Функция load_file загружает содержимое файла с сервера в виде строки. Например, следующая команда загрузит все содержимое из /etc/passwd файл следующим образом:
выберите load_file('/etc/passwd')
- из файла
Точно так же функция outfile записывает содержимое в файлы локального сервера. Злоумышленники могут использовать эту функцию для записи полезной нагрузки в файл на сервере следующим образом:
выберите «Внедрение SQL в локальный файл» во внешний файл «/tmp/file.txt»;
кот /tmp/file.txt
Выход:
SQL-инъекция в локальный файл
- файл дампа
Эта функция использует причину выбора для записи в файл без возврата вывода на экран.
кот /tmp/file.txt
выберите «Привет, мир!» в файл дампа '/tmp/world';
Выход:
Запрос выполнен успешно, затронута 1 строка (0,001 сек.)
Вы можете отключить эти функции, отменив привилегию FILE следующим образом:
отозвать ФАЙЛ на *.* с 'user_name'@'localhost';
Связанный: Руководство для начинающих по Metasploit в Kali Linux (с практическими примерами)
4. Отключить порт по умолчанию
Мы знаем, что службы MySQL работают на порту 3306, и злоумышленники сканируют порты, чтобы проверить службы, работающие в сети. Чтобы добавить безопасность за счет неясности и изменить порт MySQL по умолчанию, отредактировав системную переменную порта в его основном файле конфигурации, вам необходимо ввести следующее:
ВИМ /etc/mysql/my.cnf
порт=XXXX
перезапуск службы sudo mysql
5. Избегайте подстановочных знаков в именах учетных записей
Имена учетных записей в MySQL состоят из двух частей: пользователя и имени хоста "имя_пользователя"@"имя_хоста". Это позволяет администратору создавать учетные записи для пользователей с одинаковым именем, которые подключаются с разных хостов. Однако хост-часть имени учетной записи допускает использование подстановочных знаков, которые могут быть точкой доступа к базе данных из любого места.
Необязательное использование значения имени хоста или IP-адреса эквивалентно 'user_name'@'%', где % соответствует шаблону MySQL, соответствующему операции LIKE, а % означает любое имя хоста. Между тем, доступ из «192.168.132.%» означает любую попытку из сети класса C. Кроме того, любой может получить доступ к базе данных, назвав хост-часть «192.18.132.mysql.com».
Чтобы избежать таких попыток, MySQL позволяет определить сетевую маску со значением хоста для идентификации сетевых битов IP-адреса:
client-ip_add и сетевая маска = host_name
Синтаксис для создания имени хоста: host_ip/netmask:
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jhon'@'192.168.132.0/255.255.255.0';
Приведенное выше значение хоста позволяет пользователю Джон для доступа к базе данных с любого IP в диапазоне 192.168.132.0-192.168.132.255. Точно так же значения хоста 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 разрешат хосты из сетей класса A и B. В то время как 192.168.132.5 разрешает доступ только с определенного IP-адреса.
6. Отключить явный доступ
Имя пользователя в MySQL — это либо имя, с которым базы данных принимают входящие соединения, либо пустое имя пользователя "@"host_name", создающее анонимного пользователя. Однако присутствие анонимного пользователя может заставить злоумышленников получить доступ к серверу базы данных. Кроме того, версии MySQL до MySQL 5.7 создают анонимный набор пользователей, и установка после обновления версии по-прежнему добавляет этих пользователей.
выберите пользователя, хост, пароль из mysql.user, где пользователю нравится '';
Вы можете заметить, что столбцы пользователя и пароля пусты, а доступ ограничен локальным хостом. Однако вы не хотите, чтобы кто-либо имел доступ к базе данных. Используйте следующую команду для удаления анонимных пользователей:
удалить пользователя ""@"localhost"
сброс привилегий;
7. Установите учетную запись без полномочий root в качестве владельца или группы
Настройка учетной записи пользователя без полномочий root не связана с пользователем root MySQL. Установка MySQL в системах Linux/Unix из пакетов tar и tar.gz позволяет запускать сервер любому пользователю с ограниченными правами. Это недостаток безопасности, потому что любой пользователь с опцией гранта FILE может редактировать или создавать файлы на сервере. Однако он возвращает ошибку, когда пользователь пытается получить к нему доступ без -пользователь=корень ошибка.
Вы можете избежать этого, применяя эмпирическое правило доступа к серверу базы данных в качестве отдельного пользователя Linux. Чтобы запустить mysqld от имени обычного пользователя Linux, остановите сервер и измените разрешения на чтение/запись сервера MySQl в mysql следующим образом:
chown -R mysql /path/to/mysql/datadir
Откройте основной файл конфигурации MySQL, добавьте нового пользователя mysql и перезапустите службу, чтобы избежать ненужного доступа к серверу:
ВИМ /etc/mysql/my.cnf
пользователь=mysql
перезапуск службы sudo mysql
8. Установить пароль для корневой учетной записи
При установке MySQL через интерактивную оболочку в дистрибутивах Linux на основе Debian создается учетная запись пользователя root и предлагается установить пароль. Однако этого не происходит при установке неинтерактивной оболочки и дистрибутивах на основе Red Hat. Как указано выше, пользователь без полномочий root на машине Linux может получить доступ к учетной записи пользователя root mysql, используя команду -пользователь=корень вариант. Вы можете избежать этого, установив пароль следующим образом:
sudo mysqladmin пароль
ВИМ /etc/mysql/my.cnf
пароль=
перезапуск службы sudo mysql
9. Обеспечьте шифрование данных при передаче и хранении
Незашифрованная связь по умолчанию между клиентом и сервером создает риск перехвата данных любым посредником. Точно так же незашифрованные пользовательские данные в базе данных ставят под угрозу конфиденциальность и целостность пользователя. MySQL поддерживает шифрование данных между клиентом и сервером по протоколу TLS/SSL, в то время как незашифрованная связь приемлема только тогда, когда обе взаимодействующие стороны находятся в одной сети.
MySQL теперь поддерживает шифрование в состоянии покоя, чтобы защитить данные, хранящиеся на сервере, даже при взломе системы.
Расширенная безопасность MySQL: защитите себя
Обеспечение высочайшего уровня онлайн-безопасности имеет решающее значение, и эта статья даст вам несколько полезных указаний в правильном направлении. Вышеуказанные шаги полезны для защиты вашего сервера базы данных, но также важно научиться назначать минимальные разрешения пользователям без прав администратора.
Создайте свою собственную базу данных mySQL, используя только текстовый редактор и этот базовый план структуры, или «схему».
Читать далее
- Программирование
- Безопасность
- Программирование
- Советы по безопасности
- Безопасность

Румаиса — независимый писатель в MUO. Она носила много шляп, от математика до энтузиаста информационной безопасности, и теперь работает аналитиком SOC. Ее интересы включают чтение и письмо о новых технологиях, дистрибутивах Linux и обо всем, что связано с информационной безопасностью.
Подписывайтесь на нашу новостную рассылку
Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!
Нажмите здесь, чтобы подписаться