Доступ к базе данных 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 9

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. Путь к нирване описан ниже.

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

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

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

    - 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

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

Прокомментируйте строку:

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

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