我一直在 Windows 上使用 Navicat 来管理我的 MySQL/Percona 实例。
前几天我买了一台新服务器,并安装了MariaDB 10.3.9。
当我在 Putty 会话中通过 SSHd 进入盒子时,我可以很好地连接到它。 mysql -u root -p
完美地启动它。
但出于某种原因,Navicat 抛出了错误access denied for user 'root'@'::1' (using password: YES)
Navicat 设置与我以前一直使用的相同:
主机名:localhost 端口:3306 Mysql 用户名:root Mysql 密码:[root 的 mysql 密码]
使用 SSH 隧道:是 IP 地址:[我的服务器的 ip] SSH 用户名:[我的名字] SSH 密码:[我的 ssh 密码]
我不确定为什么当我手动执行此操作时,它可以通过 SSH 工作,但当 Navicat 执行此操作时却不行,尽管它大概在做同样的事情。这是什么意思'::1'
,这是否指出了问题?
谢谢!
答案1
其实有三MySQL 中 root 用户有细微的不同。(这确实很麻烦,但这种情况一直存在,可能不会改变……)
MariaDB [(none)]> select Host, User from mysql.user where User = 'root';
+-----------+------+
| Host | User |
+-----------+------+
| 127.0.0.1 | root |
| ::1 | root |
| localhost | root |
+-----------+------+
3 rows in set (0.06 sec)
root
仅当使用 UNIX 套接字连接时才使用具有主机的用户localhost
。其他用户分别在通过 TCP 套接字、IPv4 或 IPv6 连接时使用。
当您使用 Navicat 进行 ssh 端口转发时,将使用 TCP 套接字,特别是 IPv6 TCP 套接字(因为 IPv6 优于 IPv4)。因此该用户是被认证的对象。
我们大多数人解决这个问题的方法是确保三行密码设置相同。