Включить удаленное соединение с MySQL: ERROR 1045 (28000): доступ запрещен для пользователя

MySQL 5.1.31 работает в Windows XP.

На сервере локальный MySQL (192.168.233.142) я могу подключиться как root следующим образом:

>mysql --host=192.168.233.142 --user=root --password=redacted

На машине remote (192.168.233.163) я вижу, что порт mysql открыт:

# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).

Но когда вы пытаетесь подключиться к mysql с машины remote, я получаю:

# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)

У меня есть только 2 записи в mysql.user:

Host         User     Password
--------------------------------------
localhost    root     *blahblahblah
%            root     [same as above]

Что еще нужно сделать, чтобы включить удаленный доступ?

ИЗМЕНИТЬ

Как было предложено Пауло ниже, я попытался заменить запись mysql.user на% ссылкой на конкретную IP-запись, поэтому теперь моя таблица пользователей выглядит следующим образом:

Host             User     Password
------------------------------------------
localhost        root     *blahblahblah
192.168.233.163  root     [same as above]

Затем я перезапустил машину, но проблема не устранена.

Ответ 1

Пауло помогает привести меня к решению. Это было сочетание следующего:

  • пароль содержит знак доллара
  • Я пытался подключиться из оболочки Linux

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

Например, если ваш пароль "pas $ word", из Linux bash мы должны подключиться следующим образом:

# mysql --host=192.168.233.142 --user=root --password=pas\$word

Ответ 2

Вы должны положить это как root:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'IP' IDENTIFIED BY 'PASSWORD' with grant option;

;

где IP - это IP-адрес, который вы хотите разрешить, USERNAME - это пользователь, которого вы используете для подключения, а пароль - соответствующий пароль.

Если вы хотите разрешить доступ с любого IP-адреса, просто введите % вместо вашего IP-адреса

и тогда вам остается только положить

FLUSH PRIVILEGES;

Или перезапустите сервер mysql и его.

Ответ 3

Я получал ту же ошибку после предоставления удаленного доступа, пока не сделал это:

Из /etc/mysql/my.cnf

В новых версиях mysql расположение файла: /etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1

(прокомментируйте эту строку: bind-address = 127.0.0.1)

Затем запустите service mysql restart.

Ответ 4

По умолчанию в MySQL сервер удаленный доступ отключен. Процесс предоставления удаленного доступа пользователю.

  • Перейдите в мою папку sql bin или добавьте ее в PATH
  • Войдите в root с помощью mysql -uroot -proot (или любого другого пароля root.)
  • При успехе вы получите mysql>
  • Предоставить доступ для всех пользователей.

GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';

Здесь IP - это IP-адрес, для которого вы хотите разрешить удаленный доступ, если мы поместим %, любой IP-адрес может получить доступ удаленно.

Пример:

C:\Users\UserName> cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin

C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.27 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.25 sec)

Это для другого пользователя.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'testUser'@'%' IDENTIFIED BY 'testUser';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Надеюсь, это поможет

Ответ 5

У вас есть брандмауэр? убедитесь, что порт 3306 открыт.

В окнах по умолчанию создается пользовательская учетная запись mysql, которой разрешен доступ с локального хоста, только если вы не выбрали опцию включения доступа с удаленных компьютеров во время установки.

создание или обновление желаемого пользователя с помощью "%" в качестве имени хоста.

пример:

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

Ответ 6

  • Повторите попытку flush privileges.

  • Попробуйте перезагрузить сервер, чтобы перезагрузить гранты.

  • Попробуйте создать пользователя с хостом "192.168.233.163". "%", похоже, не позволяет всем (это странно)

Ответ 7

В моем случае я пытался подключиться к удаленному серверу mysql на cent OS. После прохождения большого количества решений (предоставление всех привилегий, удаление привязок ip, создание сетей) проблема все еще не решена.

Как оказалось, при просмотре различных решений я столкнулся с iptables, что заставило меня понять, что порт 3306 mysql не принимает соединения.

Вот небольшая заметка о том, как я проверил и разрешил эту проблему.

  • Проверка того, что порт принимает соединения:

    telnet (mysql server ip) [portNo]

  • Добавление правила таблицы ip, чтобы разрешить подключения к порту:

    iptables -A INPUT -i eth0 -p tcp -m tcp -dport 3306 -j ACCEPT

  • Не рекомендовал бы это для рабочей среды, но если ваши iptables не настроены должным образом, добавление правил может еще не решить проблему. В этом случае следует сделать следующее:

    служба iptables stop

Надеюсь, что это поможет.

Ответ 8

если вы используете динамический ip, просто предоставляйте доступ к 192.168.2.%, поэтому теперь вам не нужно беспокоиться о предоставлении доступа к вашему ip-адресу каждый раз.

Ответ 9

Новое место для конфигурационного файла mysql

/etc/mysql/mysql.conf.d/mysqld.cnf

Ответ 10

Я боролся с удаленным входом в MYSQL для моего экземпляра Amazon EC2 Linux. Найденное решение состояло в том, чтобы убедиться, что моя группа безопасности включила правило входа для порта MySQL 3306 для включения моего IP-адреса (или 0.0.0.0/0 для любого места). Сразу же можно подключиться удаленно, как только я добавлю это правило.

Ответ 11

MySQL ODBC 3.51 Драйвер - это то, что специальные символы в пароле не обрабатываются.

"Предупреждение. У вас может быть серьезная головная боль с MySQL ODBC 3.51, если пароль в вашей команде GRANT содержит специальные символы, такие как! @# $% ^?. MySQL ODBC 3.51 ODBC Driver не поддерживает эти специальные символы в пароль. Единственное сообщение об ошибке, которое вы получите, -" Доступ запрещен "(с использованием пароля: ДА)" - от http://www.plaintutorials.com/install-and-create-mysql-odbc-connector-on-windows-7/

Ответ 12

Комбинация пользователя/хоста может быть создана без пароля.

Я предполагал, что при добавлении нового хоста для существующего пользователя (с использованием приложения GUI) существующий пароль также будет использоваться для новой комбинации пользователя/хоста.

Я могу войти в систему с помощью

mysql -u username -p PASSWORD

локально, но не из IPADDRESS с

mysql -u --host=HOST -p PASSWORD

(я действительно мог войти в систему из IPADDRESS без использования пароля)

mysql -u --host=HOST

Настройка доступа к паролю:

set password for '<USER>'@'<IPADDRESS>' = '<PASSWORD>';