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

504

Это должно быть мертвым простым, но я не могу заставить его работать на всю жизнь. Я просто пытаюсь подключиться удаленно к моему серверу 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, как с хостом '%'.

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

  • 2
    Эта ссылка объясняет об ошибке: webyog.com/faq/content/23/36/en/…
  • 0
    Не удается войти в систему как root в большинстве случаев из-за мер безопасности.
Теги:
mysql-error-1130

22 ответа

678
Лучший ответ

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

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;

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

Edit:

Из MySQL FAQ:

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

  • 15
    Хороший улов Янник, однако я бы не советовал ему предоставлять все привилегии пользователю без полномочий root. Возможно уменьшенный набор?
  • 3
    Что ж, это действительно не очень хорошая идея, но разрешить «root» подключаться со всех хостов точно так же, так как он имеет тот же уровень привилегий.
Показать ещё 6 комментариев
212

Нужно создать 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

  • 3
    Пришлось перезапустить mysql после выполнения вышеуказанных шагов, чтобы это работало на меня.
  • 0
    Вы должны создать имя пользователя @ localhost? Разве мало, если вы просто создаете имя пользователя @%? Я имею в виду, если вы просто создадите имя пользователя @%, вы не сможете подключиться к этому пользователю с локального хоста?
Показать ещё 2 комментария
85

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

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

  • Ubuntu 14.04 LTS
  • MySQL v5.5.37

Решение

  1. Откройте файл в "etc/mysql/my.cnf"
  2. Проверить:

    • порт (по умолчанию это "порт = 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 и добавляю "Имя хоста: 10.1.1.7", "Порт: 3306", "Имя пользователя: root"
  • 1
    Вы можете пропустить use dataentry (так как у большинства людей эта база данных не будет создана).
  • 3
    я смог сделать это без перезапуска службы mysql в конце
Показать ещё 2 комментария
68

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

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

Goto Privileges > Добавить пользователя

Изображение 822

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

Изображение 823

  • 3
    что будет команда cli, чтобы сделать это?
52

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

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;
  • 2
    ОШИБКА 1045 (28000): доступ запрещен для пользователя 'root' @ 'localhost' (с использованием passwoYES) Y
  • 7
    Должно быть *.* ?
Показать ещё 1 комментарий
22

Сообщение *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> FROM сервера MySQL. Если это не работает, то на DNS-сервере нет записи. Кроме того, вы можете поместить запись в файл HOSTS сервера MySQL (<ipaddress> <fullyqualifiedhostname> <hostname> < - здесь может иметь значение порядок.)

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

  • 1
    "является ответом от сервера MySQL клиенту MySQL." Спасибо, мне было интересно, откуда возникла ошибка: моя машина или сервер. У меня ошибка «ОШИБКА 1130 (HY000):» и т. Д.
13

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

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

  • 1
    +1 Я согласен с вашей рекомендацией, и привилегии сброса могут сработать, если он внес изменения в таблицу пользователей вручную. (убрал старые комментарии)
3

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

 FLUSH PRIVILEGES;
  • 0
    Это помогло мне в сочетании с этим: ПРЕДОСТАВИТЬ ВСЕ ПРИВИЛЕГИИ НА . TO 'root' @ '%' С GRANT OPTION;
2

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

flush privileges;

Это само по себе исправляет проблему для меня на Ubuntu 16.04, mysql 5.7.20. YMMV.

2

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

Нажмите "Менеджер пользователя": Изображение 824

Теперь, если вы хотите предоставить доступ ЗА ЛЮБОЙ ДРУГОЙ УДАЛЕННЫЙ ПК, просто убедитесь, что, как и в нижнем изображении, значение поля Host равно% (который является подстановочным знаком)

Изображение 825

1

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

просто перейдите к целевой БД сервера в панели управления, в моем случае: Управление MySQL → выберите вашу БД → вы найдете: "Хосты доступа", просто добавьте сюда свой удаленный хост и он работает сейчас! Изображение 826

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

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

1

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

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

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

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

1

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

1

Хорошо, что вы можете сделать, это просто открыть файл mysql.cfg, и вы должны изменить Bind-address на этот

bind-address = 127.0.0.1

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

Посмотрите, что у вас может быть идея.

это реальный зол

  • 3
    Это связано, но не та же проблема. Первоначально полученная ошибка указывает, что клиент успешно подключается к серверу MySQL, но затем не проходит аутентификацию. Если для bind-address установлено значение 127.0.0.1, вместо этого вы получите ошибку отказа в соединении.
  • 0
    Но это адрес, который позволит всем Хосту подключиться к серверу?
Показать ещё 1 комментарий
0

Эта работа для DirectAdmin;

  1. Зайдите в свой DirectAdmin.
  2. Перейти к MySQL Management.
  3. Выберите вашу database.
  4. Под вашей Accesse Host есть поле. Вы должны заполнить это поле к xxx.xx.xxx.xx
  5. Нажмите на Add Host.

Законченный. Теперь вы можете получить доступ к этой БД с помощью вашего your_database_username & your_database_password.
Так просто!

0

Простой способ:

Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD'; 

затем

FLUSH PRIVILEGES;

сделанный!

  • 0
    что означает%?
  • 1
    это как все. Вы можете привести пример: WHERE CustomerName LIKE 'a%' - находит любые значения, которые начинаются с "a"
0

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

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

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

0

Проблема: 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

Файл user.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 также могла работать.

0

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

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

0

Все ответы здесь не работали в моем случае, поэтому я гость это может помочь другим пользователям в будущем. Это также может быть проблемой в нашем коде, а не только в 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
0

В ситуации, когда кто-то сталкивается с этой проблемой, это происходит из SQLyog, это произошло:

Я подключился к удаленной базе данных (из SQLyog) и работал несколько часов. Впоследствии я покинул систему в течение нескольких минут, а затем вернулся, чтобы продолжить свою работу - ОШИБКА 1130! Ничего, с которым я пытался работать; Перезапуск SQLyog не исправил его. Затем я перезапустил систему - она ​​все еще не работала.

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

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню