Доступ к базе данных mysql с внешнего хоста / ip? (ie: MySQL workbench)

У меня есть сервер mysql, работающий на x.X. X. x, и может получить доступ к нему внутренне без проблем (конечно). Однако при попытке подключения извне, т. е. с помощью MySQL workbench, или даже с внешнего сервера, я получаю сообщение об ошибке "хост" 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;

У меня была точно такая же ситуация.мой MYSQL установлен на centOS. Путь к нирване, как показано ниже.

  1. bind-адрес: не работает
  2. разрешение grant: не работает
  3. Iptables при выключении: сделал работу.

решение: я пошел на рыбалку в iptables и сделал следующие изменения:

  1. доступ к iptables с помощью команды: vim/etc/sysconfig / iptables
  2. Если вы найдете ниже операторы комментируют их, добавляя " # " в начале строки.

    -вход-S 123.123.123.123/32-p tcp-m состояние --state NEW-m tcp --dport 3306-j ACCEPT

    - вход-J отклонить --отклонить-с icmp-хост-запрещено

    -выход-p tcp-m tcp --dport 3306-j ACCEPT

  3. перезапустите 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. Настроить bind-address = 192.168.1.4 работает нормально. (свой адрес, буквально) Она должна быть интерпретация 127.0.0.1 внутри виртуальной конфигурации, не уверен...


закомментировать строку:

bind-address = localhost
#bind-address = localhost < this is what it should look like.

в вашем MySQL мой.файл conf. Обычно он находится в /etc/mysql / my.conf.