Хосту "xxx.xx.xxx.xxx" не разрешено подключаться к этому серверу 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', как и у другой записи с хостом '%'.
Я сошел с ума, и понятия не имею, как поступить. Любые идеи приветствуются.
31 ответ
Возможно, меры предосторожности. Вы можете попробовать добавить новую учетную запись администратора:
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. Для любого другого действия укажите именно те привилегии, которые вам нужны, и ограничьте доступ пользователя, как предлагает Паскаль ниже.
Редактировать:
Из MySQL FAQ:
Если вы не можете понять, почему вы получаете отказ в доступе, удалите из пользовательской таблицы все записи, в которых значения хоста содержат подстановочные знаки (записи, содержащие символы "%" или "_"). Очень распространенная ошибка - вставить новую запись с Host='%' и User='some_user', полагая, что это позволяет указать localhost для подключения с той же машины. Причина, по которой это не работает, заключается в том, что привилегии по умолчанию включают запись с Host = 'localhost' и User = ''. Поскольку эта запись имеет значение Host "localhost", которое является более конкретным, чем "%", она используется в предпочтении новой записи при подключении с localhost! Правильная процедура - вставить вторую запись с Host = 'localhost' и User = 'some_user' или удалить запись с Host = 'localhost' и User = ''. После удаления записи не забудьте выполнить оператор FLUSH PRIVILEGES, чтобы перезагрузить таблицы грантов. См. Также раздел 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
Решение
- Откройте файл в "etc/mysql/my.cnf"
Проверить:
- порт (по умолчанию это "порт = 3306")
- bind-address (по умолчанию это "bind-address = 127.0.0.1"; если вы хотите открыть для всех, просто закомментируйте эту строку. В моем примере я скажу, что реальный сервер находится на 10.1.1.7)
Теперь получите доступ к базе данных 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
sudo service mysqld restart
- Теперь вы должны иметь возможность удаленного подключения к вашей базе данных. Например, я использую MySQL Workbench и добавляю "Имя хоста:10.1.1.7", "Порт:3306", "Имя пользователя:root"
Просто выполните следующие шаги:
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;
Вам необходимо предоставить доступ пользователю с любого имени хоста.
Вот как вы добавляете новую привилегию из phpmyadmin
Перейти к привилегиям> Добавить нового пользователя
Выберите любой хост для желаемого имени пользователя
Простой способ:
Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD';
затем
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, решила эту проблему.
Это работает для любого будущего удаленного подключения mysql!
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Перейдите к строке, которая начинается с директивы адреса привязки. Должно получиться так:
bind-address = 0.0.0.0
Войдите в свой mysql как корневой терминал
mysql -u root -p
-- root password
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;
EXIT;
наконец, предоставьте этому компьютеру исключительное разрешение на удаленное подключение к базе данных с помощью следующей команды.
sudo ufw allow from remote_IP_address to any port 3306
Если вы изменяете таблицы грантов вручную (используя INSERT, UPDATE и т. Д.), Вы должны выполнить FLUSH PRIVILEGES
заявление, чтобы сказать серверу перезагрузить таблицы предоставления.
PS: я бы не советовал разрешать любому хосту подключаться к любому пользователю (особенно не root
использования). Если вы используете mysql для клиент-серверного приложения, предпочтите адрес подсети. Если вы используете mysql с веб-сервером или сервером приложений, используйте определенные IP-адреса.
Если вы используете MySQL WorkBench, вы можете добиться этого с помощью графического интерфейса:
После этого все готово. Затем, если вы хотите уточнить свою конфигурацию, вы можете использовать вкладку «Административные роли», чтобы установить команду, которая может использоваться пользователем (SELECT, ALTER и т. Д.), И вкладку «Привилегии схемы», чтобы ограничить взаимодействие пользователя с конкретные схемы.
Большинство ответов здесь показывают, что вы создаете пользователей с двумя значениями хоста: один для localhost
и один для %
,
Обратите внимание, что кроме встроенного локального пользователя, такого как root, вам не нужно этого делать. Если вы просто хотите создать нового пользователя, который может войти в систему из любого места, вы можете использовать
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;
и это будет работать просто отлично. (Как уже упоминали другие, это ужасная идея - предоставить административные привилегии пользователю из любого домена.)
Ну, ничего из приведенного выше ответа у меня не сработало. После долгих исследований я нашел решение. Хотя я могу опоздать, это может помочь другим в будущем.
Войдите на свой SQL-сервер с терминала
mysql -u root -p
-- root password
GRANT ALL ON *.* to root@'XX.XXX.XXX.XX' IDENTIFIED BY 'password';
Это должно решить проблему с разрешением.
Удачного кодирования!!
Простой способ - войти в phpmyadmin с учетной записью root, перейдите в базу данных mysql и выберите таблицу пользователей, там отредактируйте учетную запись root и в поле хоста добавьте подстановочный знак%. а потом через ssh флеш привилегии
FLUSH PRIVILEGES;
Просто найдите лучший способ сделать это из панели управления хостингом (я использую DirectAdmin здесь)
просто перейдите на целевую серверную БД в вашей панели управления, в моем случае: Управление MySQL -> выберите вашу БД -> вы найдете: "Доступ к хостам", просто добавьте сюда свой удаленный хост и он работает сейчас!
Я думаю, что есть аналогичная опция на других C.panels, таких как plesk и т. Д.
Я надеюсь, что это было полезно и для вас.
Если это недавняя установка mysql, то прежде чем что-либо менять, попробуйте просто выполнить эту команду и попробуйте снова:
flush privileges;
Это одно исправляет проблему для меня в Ubuntu 16.04, mysql 5.7.20. YMMV.
Вам необходимо разрешить пользователям из других мест (в вашем случае xxxx), а также из того места, где вы собираетесь подключаться к базе данных.
Все приведенные выше ответы кажутся правильными в объявлении подстановочного знака (%), разрешающем хосты из всех мест, но это открывает его для всех хостов и, следовательно, создает угрозу безопасности. Лучше явно указать хост следующим образом:
CREATE USER 'username'@'x.x.x.x' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'x.x.x.x' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Замените xxxx на IP-адрес хоста, с которого вы подключаетесь.
Я также столкнулся с той же проблемой. Я решил это за 2 минуты для меня, я просто белый список IP через Cpanel
Предположим, вы пытаетесь подключить базу данных сервера B с сервера A. Перейдите на C-панель сервера B -> Удаленный MySQL-> введите IP-адрес сервера A и все.
Ну что вы можете сделать, это просто открыть файл mysql.cfg, и вы должны изменить Bind-адрес на этот
bind-address = 127.0.0.1
а затем перезапустите mysql, и вы сможете подключить этот сервер к этому.
Посмотрите, что вы можете иметь идею от этого.
Если вы работаете в Windows; Простое решение - запустить мастер настройки экземпляра сервера MySQL. Он находится в вашей группе MYSQL в меню "Пуск". На втором из последнего экрана щелкните поле с надписью "разрешить root-доступ с удаленных компьютеров".
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
эта ошибка, потому что нет пароля к корню, и это, возможно, произошло с вами, когда вы пытаетесь подключиться извне.
1. Из терминала подключитесь к работающему контейнеру MySQL.
docker exec -it your_container_name_or_id bash
2. В вашем контейнере подключите вас к базе данных MySQL.
mysql -u your_user -p
введите свой пароль для подключения к базе данных.
3. выполните этот сценарий SQL, чтобы получить список всех существующих пользователей базы данных:
SELECT host, user FROM mysql.user;
Результат будет примерно таким:
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
Это работает для DirectAdmin;
- Перейти к вашей
DirectAdmin
, - Перейти к вашей
MySQL Management
, - Выберите свой
database
, - Под вашим
Accesse Host
На вкладке есть поле. Вы должны заполнить это полеxxx.xx.xxx.xx
, - Нажмите на
Add Host
,
Законченный. Теперь вы можете получить доступ к этой базе данных your_database_username
& your_database_password
,
Так просто!
На случай, если кто-то столкнулся с этой проблемой из-за SQLyog, это произошло:
Я подключился к удаленной базе данных (изнутри SQLyog) и работал несколько часов. После этого я на несколько минут вышел из системы, а затем вернулся, чтобы продолжить работу - ОШИБКА 1130! Ничто из того, что я пробовал, не сработало; Перезапуск SQLyog не помог. Затем я перезапустил систему - она все еще не работала.
Поэтому я попытался подключиться с терминала - все заработало. Затем повторил это на SQLyog ... и это сработало. Я не могу объяснить это, кроме как "случайные компьютерные причуды", но я думаю, что это может кому-то помочь.
Этот ответ может помочь кому-то...
Все эти ответы не помогли, тогда я понял, что забыл проверить одну важную вещь.. Порт:)
У меня MySQL работает в док-контейнере на другом порту. Я указывал на мою хост-машину через порт 3306, на котором запущен сервер mysql. Мой контейнер выставляет сервер на порт 33060. Так что все это время я смотрел не на тот сервер! DOH!
CPANEL решение
Зайдите в Cpanel, поищите Remote MySQL. Добавьте IP в поле ввода:
Хост (подстановочный знак% разрешен)
Комментарий, чтобы запомнить, что это за ip. Это было для меня.
Если вы пытаетесь выполнить запрос MySQL без определения строки подключения, вы получите эту ошибку.
Возможно, вы забыли определить строку подключения перед выполнением. ты это проверил? (Извините за плохой английский)
Все ответы здесь не сработали в моем случае, так что я гость, это может помочь другим пользователям в будущем. Это также может быть проблемой в нашем коде, а не только в 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
Проблема: 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 также могла работать.