Я пытался понять, почему я продолжаю получать эту ошибку, когда пытаюсь подключиться к серверу MySQL с помощью следующих команд.
$~ mysql -u username -h SQLserver -p
Enter password:
ERROR 1045 (28000): Access denied for user 'username'@'myIP' (using password: YES)
Я сделал следующее:
Порт открыт в брандмауэре, иначе я бы не получил ошибку, это просто тайм-аут.
Сервер MySQL не работает с пропущенным сетевым адресом или адресом привязки
в имени пользователя указан хост как «%», и я могу подключиться локально, поэтому пароль правильный.
GRANT USAGE ON *.* TO username@% IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
Я хотел знать, есть ли у кого-нибудь идеи или сталкивался ли с этой проблемой раньше и решил ее? Как видите, я могу войти в систему локально, но когда я пытаюсь выполнить -h server, я получаю сообщение об ошибке.
mysql> SELECT user(),Current_user();
+--------------------+----------------+
| user() | Current_user() |
+--------------------+----------------+
| username@localhost | username@% |
+--------------------+----------------+
1 row in set (0.00 sec)
Результаты для комментариев:
mysql> select user, host from mysql.user where user='username';
+----------+------+
| user | host |
+----------+------+
| username | % |
+----------+------+
1 row in set (0.00 sec)
mysql> show grants for 'username';
+----------------------------------------------------------------------------------------------------------------+
| Grants for username@% |
+----------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY PASSWORD '*F42AD03PASSWORDHASHADF4021C86B' |
| GRANT ALL PRIVILEGES ON `DB2`.* TO 'username'@'%' |
+----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
Возможно, это выходит за рамки, но я предпочитаю никогда не оставлять прослушивание db на общедоступном порту, и это может помочь вам избежать проблемы.
Я настраиваю все удаленные базы данных, которые мне когда-либо понадобятся, с помощью [auto] ssh для прослушивания на локальном хосте машины, я хочу получить доступ к базе данных. Это:
autossh N -f -L 3307:127.0.0.1:3306 yourserver
привяжет порт 127.0.0.1:3306 вашего сервера к локальному порту 3307 машины, с которой вы звоните. Вам даже не нужны привилегии sudo для привязки этого порта.
Когда вы теперь получаете доступ к серверу с
mysql -u user -P 3307 -h 127.0.0.1 -p
вы являетесь пользователем «localhost» на удаленном хосте, и необходимость в 'user'@'remote'
или 'user'@'%'
директива. Но не используйте
mysql -u user -P 3307 -h localhost -p
потому что таким образом клиент mysql пытается подключиться к сокету, который мы не перенаправили таким образом и поэтому недоступен.
Хотя после установки соединения SSH работает быстро, вы не должны ощущать никаких накладных расходов. autossh
бесконечно пытается восстановить соединение после отключения по сравнению с ssh, которое просто завершится.
Кажется, я припоминаю из глубины своей памяти, что для того, чтобы 'user' @ '%' работал, у вас также должен быть 'user' @ 'localhost'.
Попробуйте сделать пользователя хоста localhost с тем же именем пользователя.
Хотя я мог ошибаться.