Доступ к базе данных mysql с внешнего хоста / ip? (ie: mysql workbench)
У меня есть сервер mysql, работающий на x. x.x.x, и я могу получить к нему внутренний доступ без проблем (конечно). Однако при попытке подключения извне, то есть с помощью mysql workbench, или даже с внешнего сервера, я получаю сообщение об ошибке "Host 'bla.бла.bla 'не разрешается подключаться к этому серверу MySQL".
Я сделал:
-
GRANT ALL PRIVILEGES ON *.* TO mysql@x.x.x.x IDENTIFIED BY "somepass";
- и я открыл порт 3306 в iptables.
8 ответов:
Вам нужно сделать
GRANT ALL PRIVILEGES ON *.* TO mysql@'bla.bla.bla' ...
Часть после
@
- это хост, с которого идет соединение, поэтому вы разрешили только соединения, идущие от localhost. Необходимо разрешить доступ с каждого удаленного хоста (или со всех хостов -... mysql@'%' ...
- если применимо).
Для решения этой задачи необходимо выполнить следующие команды:
mysql -u root -p [enter in your password] CREATE USER 'mysqluser'@'%' IDENTIFIED BY 'aC0MPL3XPa33W0RD'; GRANT ALL PRIVILEGES ON *.* TO 'mysqluser'@'%' WITH GRANT OPTION;
У меня было точно такое же situation.my MYSQL устанавливается на centOS. Путь к нирване описан ниже.
- bind-address: не работает
- выдать разрешение: не сработало
- Iptables когда выключен: сделал работу.
Решение: я пошел на рыбалку в iptables и внес следующие изменения:
- доступ к iptables с помощью команды: vim / etc/sysconfig / iptables
Если вы найдете следующие инструкции, закомментируйте их, добавив ' # ' в начало очереди.
- A INPUT-s 123.123.123.123/32-p tcp-m state --state NEW-m tcp --dport 3306-j ACCEPT
- A INPUT-j REJECT-отклонить-с icmp-хостом-запрещено
- a OUTPUT-p tcp-m tcp --dport 3306-j ACCEPT
Перезагрузите iptables с помощью команды: service iptables restart
Да, что работал для меня. Надеюсь, это кому-то пригодится.
Когда я получил свой сервер, даже у меня была та же проблема доступа к mysql из клиентского приложения MySQL, Затем я предоставил разрешение Mysql, со следующим запросом.
Это сработало великолепно
**GRANT ALL PRIVILEGES ON db_base.* TO db_user @'%' IDENTIFIED BY 'db_passwd';** db_base is the database Name db_user is database User db_passwd is the database password
После того, как вы выполните эту очистку, выполните следующую команду:
FLUSH PRIVILEGES;
Предположим, что если вы хотите предоставить права доступа к определенным таблицам в базе данных, вы можете использовать следующую команду
GRANT ALL PRIVILEGES ON db_base.HELLOWORLD TO db_user @'%' IDENTIFIED BY 'db_passwd';
Где
HELLOWORLD
- имя таблицы
Вы подключаетесь как пользователь mysql? Вы можете попробовать выполнить запрос GRANT следующим образом:
GRANT ALL PRIVILEGES ON *.* TO mysql@x.x.x.x IDENTIFIED BY "somepass";
Вы проверили, что mysql workbench пытается подключиться, используя соответствующее имя пользователя? Вы сбросили привилегии после выполнения команды grant?
Я не знаю всех тонкостей безопасности, стоящих за этой
bind-address
штукой, просто учусь, устанавливая сервер debian на виртуальную машину. У этого гостя есть виртуальная сетевая карта, настроенная как мост, так что остальная часть дома может видеть ее. Его IP - адрес 192.168.1.4. С другого компьютера (192.168.1.3) не удалось установить соединение сbind-address = 127.0.0.1
. Setupbind-address = 192.168.1.4
работает отлично. (его собственный адрес, пометно) Это должно быть интерпретация 127.0.0.1 внутри виртуальной конфигурации, не уверен...