Хост ХХХ.ХХ.ХХХ.ХХХ не разрешено подключаться к этому серверу MySQL



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

Я просто пытаюсь подключиться удаленно к моему серверу MySQL.



подключение



mysql -u root -h localhost -p  


работает нормально, но при попытке



mysql -u root -h 'any ip address here' -p


выдает ошибку



ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server


на mysql.user таблица, есть точно такая же запись для пользователя "root" с хостом "localhost", как и другой с хостом"%".



Я в своем уме, и у меня нет идея, как действовать дальше.
Любые идеи приветствуются.

747   20  

20 ответов:

возможно, это мера предосторожности. Вы можете попробовать добавить новую учетную запись администратора:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;

хотя, как отметил Паскаль и другие, не очень хорошая идея иметь пользователя с таким доступом, открытым для любого IP. Если вам нужен административный пользователь, используйте root и оставьте его на localhost. Для любого другого действия укажите точно привилегии, которые вам нужны, и ограничьте доступность пользователя, как предлагает Паскаль ниже.

Edit:

из MySQL Часто задаваемые вопросы:

Если вы не можете понять, почему вы получаете Доступ запрещен, удалить из пользователя таблица все записи, которые имеют хост значения, содержащие подстановочные знаки (записи которые содержат символы ' % 'или'_'). Один очень распространенной ошибкой является вставка нового запись с хостом= ' % ' и User= 'some_user', думая, что это позволяет указать localhost в подключение с той же машины. Этот почему это не работает, заключается в том, что привилегии по умолчанию включают вход с Host= 'localhost' и Пользователь.''= Потому что эта запись имеет хост значение 'localhost', то есть больше специфический чем"%", оно использован внутри предпочтение новой записи, когда соединение с localhost! Правильный процедура заключается в том, чтобы вставить вторую запись с Host= 'localhost' и Some_user пользователей='', или удалить запись с хостом= 'localhost' и Пользователь.''= После удаления записи, не забудьте выдать флеш привилегии заявление для перезагрузки таблицы. См. также раздел 5.4.4, "доступ Управления, Этап 1: Подключение Проверка."

нужно создать new MySQL User и назначить привилегии, как показано ниже в Query prompt через phpMyAdmin или командную строку:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

после выполнения всех четырех запросов, он должен соединиться с username / password

мое сообщение об ошибке было похоже и сказал'хост XXX не может подключиться к этому серверу MySQL ' хотя я использовал root. Вот как убедиться, что root имеет правильные разрешения.

Мои настройки:

  • Ubuntu 14.04 LTS
  • MySQL v5.5. 37

решение

  1. откройте файл под ' etc / mysql / my.cnf'
  2. Регистрация ибо:

    • порт (по умолчанию это 'port = 3306')
    • bind-address (по умолчанию это 'bind-address = 127.0.0.1'; если вы хотите открыть для всех, то просто закомментируйте эту строку. Для моего примера, я скажу, что фактический сервер находится на 10.1.1.7)
  3. теперь доступ к базе данных MySQL на вашем фактическом сервере (скажем, ваш удаленный адрес 123.123.123.123 в порту 3306 как пользователь "root", и я хочу изменить разрешения на базу данных "dataentry". Не забудьте изменить IP-адрес, порт и имя базы данных в настройках)

    mysql -u root -p
    Enter password: <enter password>
    mysql>GRANT ALL ON *.* to root@'123.123.123.123' IDENTIFIED BY 'put-your-password';
    mysql>FLUSH PRIVILEGES;
    mysql>exit
    
  4. sudo service mysqld restart

  5. теперь вы должны иметь возможность удаленного подключения к вашей базе данных. Например, я использую MySQL Workbench и вставляю 'Hostname: 10.1.1.7', 'Port:3306','Username:root'

вам нужно предоставить доступ к пользователю с любого имени хоста.

вот как вы добавляете новые привилегии от phpmyadmin

goto привилегии > добавить нового пользователя

enter image description here

выберите Любой Узел для нужного имени пользователя

enter image description here

просто выполните следующие действия:

1) Подключение к mysql

mysql -uroot -p

2) создать

CREATE USER 'user'@'%' IDENTIFIED BY 'password';

3) предоставления разрешений

 GRANT ALL PRIVILEGES ON \*.\* TO 'user'@'%' WITH GRANT OPTION;

4) Flush privileges

FLUSH PRIVILEGES;

сообщении *Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server - Это ответ от сервера MySQL клиенту MySQL. Обратите внимание, как он возвращает IP-адрес, а не имя хоста.

если вы пытаетесь связаться с mysql -h<hostname> -u<somebody> -p и он возвращает это сообщение с IP-адресом, то сервер MySQL не в состоянии сделать обратный поиск на клиенте. Это критично, потому что именно так он сопоставляет клиент MySQL с грантами.

убедитесь, что вы можете сделать nslookup <mysqlclient> С сервера MySQL. Если это не сработает, тогда нет записи на DNS-сервере. Кроме того, вы можете поместить запись в файл HOSTS сервера MySQL (<ipaddress> <fullyqualifiedhostname> <hostname>

запись в файле хоста моего сервера, позволяющая обратный поиск клиента MySQL, решила эту самую проблему.

Если вы измените таблицы грантов вручную (с помощью INSERT, UPDATE и т. д.), вы должны выполнить а FLUSH PRIVILEGES оператор, чтобы сказать серверу перезагрузить таблицы грантов.

PS: Я бы не рекомендовал разрешить любой хост для подключения любой пользователь (особенно не root использовать). Если вы используете mysql для клиент-серверного приложения, предпочтите адрес подсети. Если вы используете mysql с веб-сервером или сервером приложений, используйте определенные IP-адреса.

простой способ-войти в phpmyadmin с учетной записью root , там перейти в базу данных mysql и выбрать таблицу пользователей, там отредактировать учетную запись root и в поле хоста добавить % wild card . а потом через ssh флеш привилегии

 FLUSH PRIVILEGES;

просто используйте интерфейс, предоставляемый инструментом GUI MySql (SQLyog):

нажмите на диспетчер пользователей : enter image description here

теперь, если вы хотите предоставить доступ к любому другому удаленному ПК, просто убедитесь, что, как и в нижней картинке, значение поля Хоста равно % (что является подстановочным знаком)

enter image description here

Если это недавняя установка mysql, то перед изменением чего-либо еще, попробуйте просто выполнить эту команду, а затем повторите попытку:

flush privileges;

это само по себе устраняет проблему для меня на Ubuntu 16.04, mysql 5.7.20. МММ.

Ну, что вы можете сделать, это просто открыть mysql.cfg файл и вы должны изменить привязку-адрес к этому

bind-address = 127.0.0.1

и перезапустите MySQL и вы сможете подключить этот сервер к этому.

посмотрите это вы можете иметь форму идеи, что.

это настоящая соль

Если вы работаете в Windows;простое решение-запустить мастер настройки экземпляра сервера MySQL. Он находится в вашей группе MYSQL в меню Пуск. На втором от последнего экрана нажмите на поле, которое говорит "разрешить корневой доступ с удаленных машин".

большинство ответов здесь показывают, что вы создаете пользователей с двумя значениями хоста: один для localhost, и %.

обратите внимание, что за исключением встроенного пользователя localhost, такого как root, вам не нужно этого делать. Если вы просто хотите создать нового пользователя, который может войти в систему из любого места, вы можете использовать

CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;

и это будет работать просто отлично. (Как уже упоминалось, это ужасная идея предоставить административные привилегии пользователю из любого домена.)

просто найдите лучший способ сделать это с помощью панели управления хостингом (я использую DirectAdmin здесь)

просто перейдите на целевой сервер БД в панели управления, в моем случае: MySQL management - > выберите свою БД - > вы найдете: "Access Hosts", просто добавьте свой удаленный хост здесь и его работу сейчас! enter image description here

Я думаю, что есть аналогичная опция на других C. панелях, таких как plesk и т. д..

Я надеюсь, это было полезно для вас тоже.

на случай, если кто-то сталкивается с этой проблемой испытывает его изнутри SQLyog, это произошло:

я подключился к удаленной базе данных (изнутри SQLyog) и работал в течение нескольких часов. После этого я покинул систему на несколько минут, а затем вернулся, чтобы продолжить свою работу -ошибка 1130 ! Ничего из того, что я пробовал, не сработало; перезапуск SQLyog не исправил его. Затем я перезапустил систему-она все еще не работала.

поэтому я попытался подключиться с терминала - это сработало. Затем повторить его сам ... и это сработало. Я не могу объяснить это иначе, чем "случайная компьютерная причуда", но я думаю, что это может кому-то помочь.

Я также столкнулся с той же проблемой. Я решил это за 2 мин для меня я просто белый список ip через cpanel

Предположим, вы пытаетесь подключить базу данных сервера B с сервера A. Перейдите на сервер B Cpanel- > удаленный MySQL - > введите IP-адрес сервера и все.

проблема: root@localhost не может подключиться к новой установке mysql-community-server на openSUSE 42.2-1.150.архитектуру x86_64. Mysql отказывается от соединений-период.

устранение:

$ ls -l /var/lib/mysql/mysql/user.*
-rw-rw---- 1 mysql mysql     0 Apr 29 19:44 /var/lib/mysql/mysql/user.MYD
-rw-rw---- 1 mysql mysql  1024 Apr 29 19:44 /var/lib/mysql/mysql/user.MYI
-rw-rw---- 1 mysql mysql 10684 Apr 29 19:44 /var/lib/mysql/mysql/user.frm

пользовательский файл.MYD имеет 0 размер (действительно ?!). Я скопировал все 3 файла из другой рабочей системы.

$ /usr/sbin/rcmysql stop
$ cd /var/lib/mysql/mysql/
$ scp root@othersytem:/var/lib/mysql/mysql/user.* ./
$ /usr/sbin/rcmysql start
$ cd -
$ mysql -u root -p

я смог войти в систему. Тогда это был просто вопрос повторного применения всех привилегий схемы. Кроме того, если вы отключили IPv6, повторно включите его временно так что root@::1 учетная запись также может работать.

этот ответ может помочь кому-то...

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

У меня mysql работает в контейнере docker, работающем на другом порту. Я указывал на свою хост-машину на порту 3306, на котором у меня работает сервер mysql. Мой контейнер предоставляет сервер на порту 33060. Так что все это время я смотрел не на тот сервер! дох!

Если вы пытаетесь выполнить запрос mysql с определением connectionstring, вы получите эту ошибку.

возможно вы забыли определить строку подключения перед выполнением. вы это проверили? (извините за плохой английский)

все ответы здесь не работали в моем случае, поэтому я гость, это может помочь другим пользователям в будущем. Это также может быть проблемой в нашем коде, а не только в MySQL.

если вы используете VB.NET

вместо этого кода:

 Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database

 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database

 MysqlConn = New MySqlConnection()

вам нужно двигаться MysqlConn = New MySqlConnection() на первой линии. Так что это было бы так

 MysqlConn = New MySqlConnection()

 Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database

 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database

Comments

    Ничего не найдено.