Как разрешить подключение MySQL через интернет? - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть база данных MySQL, к которой я обращаюсь через Java JDBC, и она корректно работает в моей локальной сети (используя localhost или 192.168.*.* локальный адрес).Но я также хочу получить к нему удаленный доступ из Интернета, и когда я подключаюсь к нему, используя мой глобальный адрес 176.214.186.243 (это адрес Dynamyc, но он остается в течение 2 дней моих попыток), я получаю следующую ошибку com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. В MySQL Workbench яесть привилегии, показанные на Изображение (Все они. Но я все еще не могу подключиться к базе данных, используя глобальный IP.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

mysql ограничивает доступ для любой комбинации пользователя, таблицы и удаленного адреса.В вашем случае пользователь, скорее всего, может получить доступ ко всему локально, но не из extern (например, для root это было бы хорошо).Это можно изменить следующим образом:

GRANT ALL ON <database>.* TO 'client'@'%.%.%.%' IDENTIFIED BY '<a password for external usage>';
FLUSH PRIVILEGES;
  • <database>.* предоставляет доступ ко всем таблицам в <database>
  • Я уже добавил ваше имя пользователя, которое выглядит как client
  • %.%.%.% означает любой IP-адрес, где 1.-4.цифра может быть чем угодно
    • возможно вы можете ограничить диапазон IP-адресов или использовать вместо этого полное доменное имя
  • <a password for external usage> только для этих соединений и может быть чем-то еще.

Больше информации здесь

0 голосов
/ 22 сентября 2018

вы должны предоставить указанному пользователю привилегию для доступа с определенного IP-адреса, например:

GRANT [привилегии | ВСЕ ПРИВИЛЕГИИ] НА schema.table TO 'username' @ 'hostname' IDENTIFIED BY«пароль»
с опцией GRANT;FLUSH PRIVILEGES;

  • привилегиями могут быть имена операций, такие как select, drop и ... или если вы хотите предоставить все привилегии пользовательскому набору "ALL PRIVILEGES"
  • schema.table может указывать только одну таблицу или что-то вроде . для поддержки всех схем и таблиц.
  • имя пользователя, которое также называется ролью, очевидно, но это может быть%, чтобы предоставить всем пользователям данные привилегии.
  • имя хоста может быть ip или именем хоста или как имя пользователя может быть%, чтобы предоставить указанным пользователям данные привилегии.

для дальнейшей информации можно использовать https://dev.mysql.com/doc/refman/8.0/en/grant.html, https://stackoverflow.com/a/6239145/2137378

Документация mysql гораздо предпочтительнее.проверьте версию MySQL и продолжайте документацию по точным версиям MySQL.

Определенно, вышеприведенные описания предназначены для того, чтобы механизм mysql знал своих удаленных пользователей, и если между этими двумя есть какие-то препятствия, такие как брандмауэр, нужно как-то устранить.Например, если вы используете Ubuntu, вы можете проверить, является ли брандмауэр основной проблемой, отключив его, используя:

sudo ufw disable

После отключения брандмауэра и предоставления привилегий удаленный доступ был в порядке, тогда вы знаете, что брандмауэр являетсявопрос.чтобы включить, если использовать:

sudo ufw enable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...