Хосту "xxx.xx.xxx.xxx" не разрешено подключаться к этому серверу MySQL - PullRequest
596 голосов
/ 13 октября 2009

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

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

Ответы [ 24 ]

718 голосов
/ 13 октября 2009

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

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:

Из FAQ по MySQL:

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

236 голосов
/ 16 сентября 2013

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

102 голосов
/ 11 июня 2014

Мое сообщение об ошибке было похожим и гласило: " Хосту 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»
66 голосов
/ 21 июня 2013

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

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

Перейти к привилегиям> Добавить нового пользователя

enter image description here

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

enter image description here

56 голосов
/ 24 марта 2014

Просто выполните следующие шаги:

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;
24 голосов
/ 13 марта 2012

Сообщение *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> <- здесь может иметь значение порядок). </p>

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

15 голосов
/ 13 октября 2009

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

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

9 голосов
/ 24 ноября 2018

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

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

тогда

FLUSH PRIVILEGES;

сделано!

4 голосов
/ 27 сентября 2017

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

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

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

enter image description here

3 голосов
/ 21 февраля 2016

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

 FLUSH PRIVILEGES;
...