Доступ к базе данных MySQL с внешнего хоста / IP? (т.е.: MySQL Workbench)

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

Часть после @ это хост, с которого идет соединение, поэтому вы разрешили только соединения, поступающие с локального хоста. Вам необходимо разрешить доступ с каждого удаленного хоста (или всех хостов - ... 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. предоставить разрешение: НЕ РАБОТАЕТ
  3. Iptables при выключении: работал.

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

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

    -A ВХОД -s 123.123.123.123/32 -p tcp -m состояние --Новое состояние -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

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

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

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

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

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

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

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

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

Другие вопросы по тегам