几个月来,我一直通过 SSH 隧道连接到在我们本地测试服务器上运行的 MySQL 实例,没有任何问题。突然之间,我想不出任何变化,服务器开始拒绝来自 Sequel Pro 的登录尝试,并出现以下错误:
无法连接到主机 127.0.0.1,因为访问被拒绝。
仔细检查您的用户名和密码,并确保允许从您当前的位置访问。
MySQL 说:用户 'root'@'localhost' 拒绝访问(使用密码:是)
当通过 SSH 直接连接到服务器时,我可以从终端登录,而不是通过 SSH 隧道。问题并非特定于 Sequel Pro,也不是特定于我自己,我在通过 MySQL Workbench 连接时遇到了与办公室其他人相同的错误。mysqladmin
为了理智,我重置了密码,这绝对不是问题。
当我开始深入研究它时,我注意到错误将服务器报告为“localhost”,而不是我在 Sequel Pro 中输入的“127.0.0.1”。一位朋友建议这可能只是错误处理不好,但考虑到 MySQL 中 localhost 和 127.0.0.1 之间的显着差异,这似乎很奇怪。
为了解决隧道问题,我授予了对 root@% 的访问权限,以便我可以直接连接。这在大多数情况下都有效,我可以查看表数据、创建新数据库等。唯一的问题是当我创建用户时出现错误:
用户 'root'@'%' 的访问被拒绝(使用密码:YES)
奇怪的是用户实际上是创建的,我认为这只是授权的问题。尽管如此,从终端我可以在以 root 身份登录时做任何事情。
任何人都可以帮助阐明为什么隧道连接和(可能)grant 命令收到访问被拒绝错误?
作为参考,MySQ 是 5.6.16 版,大部分为默认设置,通过 Homebrew 安装在 MAC OS X 服务器机器上。
更新
以下是当前授予 root 访问权限的主机列表:
mysql> select host,user from mysql.user where user='root';
+----------------+------+
| host | user |
+----------------+------+
| % | root …
Run Code Online (Sandbox Code Playgroud)