我一直在试图弄清楚为什么当我尝试使用以下命令连接到 MySQL 服务器时总是出现此错误。
$~ mysql -u username -h SQLserver -p
Enter password:
ERROR 1045 (28000): Access denied for user 'username'@'myIP' (using password: YES)
我已经完成了以下操作:
端口在防火墙中打开,否则我不会得到它只是超时的错误。
未使用 skip-networking 或 bind-address
用户名运行的 MySQL 服务器的主机为“%”,我可以在本地连接,因此密码正确。
GRANT USAGE ON *.* TO username@% IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
我想知道以前是否有人有想法或遇到过这个问题并解决了?如您所见,我可以在本地登录,但是当我尝试执行 -h 服务器时,出现错误。
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)
我似乎从我的记忆深处回忆起,为了让'user'@'%'工作,你还必须有一个'user'@'localhost'。
尝试创建一个具有相同用户名的 localhost 主机用户。
不过我可能真的错了。
它可能超出范围,但我宁愿永远不要在公共端口上留下数据库监听,这可以帮助您避免这个问题。
我用 [auto]ssh 设置了我需要的所有远程数据库来监听机器的本地主机,我想访问数据库。这个:
会将您服务器的 127.0.0.1:3306 上的端口绑定到您调用的机器的本地主机端口 3307。您甚至不需要 sudo 权限来绑定此端口。
当您现在访问服务器时
您是远程主机上的“localhost”用户,不再需要
'user'@'remote'
or'user'@'%'
指令。但不要使用因为通过这种方式,mysql 客户端会尝试连接到我们尚未通过这种方式转发的套接字,因此无法访问。
认为 SSH 在建立连接后速度很快,您应该不会感到开销。
autossh
与 ssh 相比,在退出后会不断尝试重新建立连接,而 ssh 只会终止。