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

Удаленное подключение к серверу mysql?

Я пытался понять, почему я продолжаю получать эту ошибку, когда пытаюсь подключиться к серверу 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 с тем же именем пользователя.

Хотя я мог ошибаться.