Иногда при разработке необходимо работать с БД на прямую, для этого нужно подключиться к БД через клиент (PhpStorm, Mysql Workbench).
Изначально порт 3306 закрыт для подключения из другого сервера.
Здесь я опишу как открыть данный порт и создать удаленного пользователя для конкретного ip адреса, т.е. в качестве безопасности вы создаете удаленного пользователя который сможет подключаться к БД mysql только с конкретного ip адреса.
Настройка удаленного пользователя MySQL
Подключаемся к БД в консоли:
mysql -u root -pСоздайте нового удалённого пользователя с помощью команды CREATE USER.
Используйте IP-адрес клиентского компьютера в качестве хоста нового пользователя, чтобы ограничить подключение к этой машине.
На случай если опция require_secure_transport будет отключена, добавьте REQUIRE SSL, чтобы ограничить пользователя только SSL-соединениями.
CREATE USER 'remote_user'@'mysql_client_IP' IDENTIFIED BY 'password' REQUIRE SSL;
Затем предоставьте пользователю права на требуемые базы данных или таблицы. Для примера создайте базу данных example и передайте новому пользователю право на неё:
CREATE DATABASE example;
GRANT ALL ON example.* TO 'remote_user'@'mysql_client_IP';
Затем очистите привилегии, чтобы обновить настройки БД:
FLUSH PRIVILEGES;
Закройте оболочку MySQL:
exit
Тестирование удалённых подключений
Примечание: Этот подраздел нужно выполнить на клиенте MySQL.
Подключитесь к клиенту MySQL и убедитесь, что можете создать удалённое подключение к серверу. Опция –u указывает удалённого пользователя, -h задаёт IP-адрес MySQL.
mysql -u remote_user -p -h mysql_server_IPПредоставьте пароль указанного в команде пользователя, после чего вы будете подключены к удалённому серверу.
Убедитесь, что подключение шифруется:
\s -------------- . . . SSL: Cipher in use is DHE-RSA-AES256-SHA . . . Connection: mysql_server_IP via TCP/IP . . . --------------
Вернитесь в оболочку системы:
exit
Попробуйте создать соединение без шифрования:
mysql -u remote_user -p -h mysql_server_IP --ssl-mode=disabled
После запроса пароля соединение будет сброшено:
ERROR 1045 (28000): Access denied for user 'remote_user'@'mysql_server_IP' (using password: YES)
Как видите, поддерживаются только SSL-соединения, а незашифрованные соединения сбрасываются.
На данный момент сервер MySQL поддерживает безопасные удалённые подключения. В целом, этого достаточно для обеспечения безопасности данных. Однако есть некоторые дополнительные рекомендации, которые можно использовать.
Разрешаем доступ к 3306 порту извне для определенного IP адреса.
Разрешаем доступ к 3306 порту извне для определенного IP адреса
iptables -I INPUT -s xxx.xxx.xxx.xxx/32 -p tcp --dport 3306 -j ACCEPT
Сохраняем правила
/sbin/service iptables save
Чтобы сработало последнее мне понадобилось поставить еще пакет
yum install iptables-services
Решение опиралось на статью
В более поздних версиях решается открытием порта фаервола
Добавляем новую зону:
firewall-cmd --new-zone=replication --permanent
firewall-cmd --reload
Добавляем с созданную зону IP (XXX.XXX.XXX.XXX/32) или подсеть (XXX.XXX.XXX.XXX/XX):
firewall-cmd --zone=replication --add-source=XXX.XXX.XXX.XXX/32 --permanent
Открываем в созданной зоне нужный порт:
firewall-cmd --zone=replication --add-port=3306/tcp --permanent
firewall-cmd --reload
Комментрии
Комементариев нет, будьте первыми....