Назад | Перейти на главную страницу

Удаленное соединение MySQL - доступ запрещен для пользователя username @ localhost (с использованием пароля: YES)

Я настраиваю удаленное соединение с сервером MySQL, но что бы я ни пытался, я получаю ошибку отказа в доступе с удаленного сервера.

Я добавил пользователя:

CREATE USER 'username'@'REMOTE_IP_ADDRESS' IDENTIFIED BY '***';

Потом дал разрешения:

GRANT ALL PRIVILEGES ON databasename.* to username@REMOTE_IP_ADDRESS;

Моя таблица пользователей на сервере MySQL показывает (среди прочего):

+---------------+--------------------+
| user          | host               |
+---------------+--------------------+
| username      | REMOTE_IP_ADDRESS  |
+---------------+--------------------+

Если я покажу гранты пользователю, я получу:

+------------------------------------------------------------------------------------+
| Grants for username@REMOTE_IP_ADDRESS
+------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'REMOTE_IP_ADDRESS' IDENTIFIED BY PASSWORD '***'
| GRANT ALL PRIVILEGES ON `databasename`.* TO 'username'@'REMOTE_IP_ADDRESS'
+------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

Затем на удаленном сервере я использую:

mysql -u username -p DB_SERVER_IP

и получите сообщение об ошибке:

ERROR 1045 (28000): Access denied for user 'username'@'localhost' (using password: YES)

Я выполнил «сброс привилегий», но все еще не могу подключиться - я заметил, что это ошибка username @ localhost, и у меня нет никаких разрешений, установленных для username @ localhost, но мне никогда не приходилось делать это раньше. У меня есть несколько других удаленных учетных записей на том же сервере, и ни у одной из них нет @localhost, поскольку они подключаются только локально.

Что мне не хватает? Я что-то забыл сделать или что еще можно проверить?

Сообщение об ошибке указывает, что вы вообще подключаетесь не к удаленному MySQL, а к localhost. Убедитесь, что вы подключаетесь с помощью опции -h на удаленный сервер.

mysql -u username -h DB_SERVER_IP

Для простоты скажем так:

Компьютер A = содержит базу данных MySQL. IPv4 = 192.168.11.1

Компьютер B = имеет программу Eclipse, которая хочет подключиться к компьютеру A и выполнять какие-либо действия со схемами. IPv4 = 192.168.22.2


Сделайте следующее на компьютере A:

Похоже, вы пытаетесь создать нового пользователя с именем 'username'@'192.168.22.2', но другой пользователь с именем 'username' @ 'localhost' мешает / имеет приоритет.

Выполните эту команду, чтобы увидеть пользователей:

SELECT user,host FROM mysql.user;

Вы должны увидеть две записи:

1) пользователь = имя пользователя, хост = локальный хост

2) пользователь = имя пользователя, хост = 192.168.22.2

Так что сделайте эти команды:

DROP User 'username'@'localhost';
DROP User 'username'@'192.168.22.2';

Обратите внимание: если вы видите 'username' @ '%' user, также удалите / удалите эту строку.

Перезапустите MySQL Workbench

Затем снова выполните исходные команды:

CREATE USER 'username'@'192.168.22.2' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON databasename.* TO 'username'@'192.168.22.2';

Я не понимаю, почему вы использовали «***» в качестве пароля, поэтому я заменил его на «пароль».


Затем перейдите на компьютер B и откройте командную строку / терминал. Введите следующее, и вы должны быть подключены к компьютеру A. Если вы не можете подключиться, проверьте входящие правила брандмауэра компьютера A и проверьте, запущена ли служба MySQL на компьютере A.

mysql --host=192.168.11.1 --user=username --password=password

(Убедитесь, что у вас установлен mysql в качестве переменной среды, иначе командная строка не поймет команду mysql)

Полезные методы устранения неполадок: отключите все правила брандмауэра на компьютере A. В командной строке / терминале компьютера B выполните команду ping 192.168.11.1 или telnet 192.168.11.1 3306.

Вам нужно будет добавить пользователя localhost отдельно. Вы можете сделать это одной командой (а не двумя).

GRANT ALL on database.* to 'user'@'localhost' identified by 'paswword';

Если вы хотите добавить пользователя, чтобы он мог подключаться из любого места (менее безопасно), используйте это:

GRANT ALL on database.* to 'user'@'%' identified by 'password';

НАКОНЕЧНИК:

закомментируйте pid и файл сокета, если вы не можете подключиться к серверу .. mysql может подключаться с неправильным pid и / или файлом сокета, поэтому, когда вы пытаетесь подключиться к серверу через командную строку, он "выглядит" в неправильном файле pid / socket ...

### comment out pid and socket file, if you can't connect to server..
#pid-file=/var/run/mysql/mysqld.pid #socket=/var/lib/mysql/mysql.sock