Доступ к базе данных MySQL с внешнего хоста / IP? (то есть: MySQL верстак) - PullRequest
9 голосов
/ 06 мая 2011

У меня есть сервер mysql, работающий на x.x.x.x, и я могу получить к нему внутренний доступ без проблем (конечно). Однако при попытке подключиться извне, то есть с помощью MySQL Workbench или даже с внешнего сервера, я получаю сообщение об ошибке «Хосту« bla.bla.bla »не разрешено подключаться к этому серверу MySQL».

Я сделал:

  • GRANT ALL PRIVILEGES ON *.* TO mysql@x.x.x.x IDENTIFIED BY "somepass";
  • И я открыл порт 3306 в iptables.

Есть ли еще одна фундаментальная проблема безопасности, которую мне не хватает?

Ответы [ 8 ]

14 голосов
/ 06 мая 2011

Вам нужно сделать

GRANT ALL PRIVILEGES ON *.* TO mysql@'bla.bla.bla' ...

Часть после @ является хостом, с которого идет соединение, поэтому вы разрешили только соединения, идущие от localhost. Вам необходимо разрешить доступ с каждого удаленного хоста (или всех хостов - ... mysql@'%' ... - если применимо).

8 голосов
/ 17 июля 2012

Для решения этой проблемы вам необходимо выполнить следующие команды:

mysql -u root -p
[enter in your password]
CREATE USER 'mysqluser'@'%' IDENTIFIED BY 'aC0MPL3XPa33W0RD';
GRANT ALL PRIVILEGES ON *.* TO 'mysqluser'@'%' WITH GRANT OPTION;
4 голосов
/ 25 марта 2014

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

  1. адрес привязки: НЕ РАБОТАЛ
  2. предоставить разрешение: НЕ РАБОТАЕТ
  3. Iptables при выключении: DID работает.

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

  1. Доступ к iptables осуществляется с помощью команды: vim / etc / sysconfig / iptables
  2. Если вы найдете приведенные ниже операторы, ЗАКЛЮЧИТЕ их, добавив «#» в начале строки.

    -A ВХОД -s 123.123.123.123/32 -p tcp -m состояние --state NEW -m tcp --dport 3306 -j ПРИНЯТЬ

    -A INPUT -j REJECT --reject-with icmp-host-запрещено

    -A ВЫХОД -p tcp -m tcp --dport 3306 -j ПРИНЯТЬ

  3. Перезапустите iptables с помощью команды: service iptables restart

Да, это сработало для меня. Надеюсь, это кому-нибудь пригодится.

3 голосов
/ 06 мая 2011

Когда я получил свой сервер, даже у меня была та же проблема с доступом к 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 Имя таблицы

0 голосов
/ 19 мая 2013

Я не знаю тонкостей безопасности, стоящих за этой 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 внутри виртуального конфига, не уверен ...

0 голосов
/ 06 мая 2011

Вы убедились, что MySQL верстак пытается подключиться, используя соответствующее имя пользователя? Вы сбросили привилегии после выполнения команды предоставления?

0 голосов
/ 06 мая 2011

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

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

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

0 голосов
/ 06 мая 2011

Вы подключаетесь как пользователь mysql? Вы можете попробовать выполнить запрос GRANT как: GRANT ALL PRIVILEGES ON *.* TO mysql@x.x.x.x IDENTIFIED BY "somepass";

...