Это должно быть мертвым простым, но я не могу заставить его работать на всю жизнь. Я просто пытаюсь подключиться удаленно к моему серверу 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, как с хостом '%'.
Я нахожусь в своем уме и понятия не имею, как действовать дальше. Любые идеи приветствуются.
Возможно, это предосторожность. Вы можете попробовать добавить новую учетную запись администратора:
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: подключение Проверка".
Нужно создать 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 имеет правильные разрешения.
Моя настройка:
Решение
Проверить:
Теперь получите доступ к базе данных 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
use dataentry
(так как у большинства людей эта база данных не будет создана).
mysql
в конце
Вам необходимо предоставить доступ пользователю от любого имени хоста.
Вот как вы добавляете новую привилегию из phpmyadmin
Goto Privileges > Добавить пользователя
Выберите Любой хост для нужного имени пользователя
Выполните следующие действия:
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;
Сообщение *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, решила эту проблему.
Если вы вручную измените таблицы разрешений (используя INSERT, UPDATE и т.д.), вы должны выполнить
a FLUSH PRIVILEGES
, чтобы сообщить серверу перезагрузить таблицы предоставления.
PS: Я бы не рекомендовал, чтобы хост любого подключался к любому пользователю (особенно не к root
). Если вы используете mysql для приложения клиент/сервер, предпочитаете адрес подсети. Если вы используете mysql с веб-сервером или сервером приложений, используйте определенные IP-адреса.
простой способ - войти в phpmyadmin с учетной записью root, получить базу данных mysql и выбрать пользовательскую таблицу, редактировать учетную запись root и в поле хоста добавить% wild card. а затем с помощью привилегий ssh flush
FLUSH PRIVILEGES;
Если это последняя установка mysql, то перед тем, как изменить что-либо еще, попробуйте просто выполнить эту команду, а затем повторите попытку:
flush privileges;
Это само по себе исправляет проблему для меня на Ubuntu 16.04, mysql 5.7.20. YMMV.
Просто используйте интерфейс, предоставляемый MySql GUI Tool (SQLyog):
Нажмите "Менеджер пользователя":
Теперь, если вы хотите предоставить доступ ЗА ЛЮБОЙ ДРУГОЙ УДАЛЕННЫЙ ПК, просто убедитесь, что, как и в нижнем изображении, значение поля Host равно% (который является подстановочным знаком)
Просто найдите лучший способ сделать это из панели управления хостингом (я использую DirectAdmin здесь)
просто перейдите к целевой БД сервера в панели управления, в моем случае: Управление MySQL → выберите вашу БД → вы найдете: "Хосты доступа", просто добавьте сюда свой удаленный хост и он работает сейчас!
Я думаю, что есть аналогичная опция на других C.panels, таких как plesk и т.д.
Я надеюсь, что это было полезно и для вас.
Большинство ответов здесь показывают, что вы создаете пользователей с двумя значениями хоста: один для localhost
и один для %
.
Обратите внимание, что, за исключением встроенного пользователя localhost, такого как root, вам не нужно это делать. Если вы просто хотите создать нового пользователя, который может войти в систему из любого места, вы можете использовать
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;
и все будет хорошо. (Как отмечали другие, ужасная идея предоставить административные привилегии пользователю из любого домена.)
Если вы работаете в Windows; Простым решением является запуск мастера настройки экземпляра сервера MySQL. Он находится в вашей группе MYSQL в меню "Пуск". На втором из последнего экрана щелкните поле, в котором говорится: "Разрешить доступ root с удаленных компьютеров".
Хорошо, что вы можете сделать, это просто открыть файл mysql.cfg, и вы должны изменить Bind-address на этот
bind-address = 127.0.0.1
а затем перезагрузите mysql, и вы сможете подключить этот сервер к этому.
Посмотрите, что у вас может быть идея.
Эта работа для DirectAdmin;
DirectAdmin
.MySQL Management
.database
.Accesse Host
есть поле. Вы должны заполнить это поле к xxx.xx.xxx.xx
Add Host
. Законченный. Теперь вы можете получить доступ к этой БД с помощью вашего your_database_username
& your_database_password
.
Так просто!
Простой способ:
Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD';
затем
FLUSH PRIVILEGES;
сделанный!
WHERE CustomerName LIKE 'a%'
- находит любые значения, которые начинаются с "a"
Этот ответ может помочь кому-то...
Все эти ответы не помогли, тогда я понял, что забыл проверить одну важную вещь.. Порт :)
У меня MySQL работает в док-контейнере на другом порту. Я указывал на мою хост-машину через порт 3306, на котором запущен сервер mysql. Мой контейнер выставляет сервер на порт 33060. Так что все это время я смотрел не на тот сервер! DOH!
Проблема: 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 также могла работать.
если вы пытаетесь выполнить 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
В ситуации, когда кто-то сталкивается с этой проблемой, это происходит из SQLyog, это произошло:
Я подключился к удаленной базе данных (из SQLyog) и работал несколько часов. Впоследствии я покинул систему в течение нескольких минут, а затем вернулся, чтобы продолжить свою работу - ОШИБКА 1130! Ничего, с которым я пытался работать; Перезапуск SQLyog не исправил его. Затем я перезапустил систему - она все еще не работала.
Итак, я попытался подключиться к терминалу - он сработал. Затем повторил его на SQLyog... и он сработал. Я не могу объяснить это иначе, чем "случайная компьютерная причуда", но я думаю, что это может помочь кому-то.
Я тоже столкнулся с той же проблемой. Я разрешил это за 2 минуты для меня, я просто белый список ip через cpanel
Предположим, вы пытаетесь подключить базу данных сервера B от сервера A. Перейдите на Сервер B Cpanel- > Удаленный MySQL- > введите IP-адрес сервера и что он.