foo*_*foo 2 mysql port-forwarding
我在我的机器上设置了 MySQL 端口转发:
ssh -f -N -L :9906:localhost:3306 <ssh login>
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试从我的本地主机连接到 MySQL:
mysql -u<user> -p<password> -P9906 -h127.0.0.1 <schema>
Run Code Online (Sandbox Code Playgroud)
它工作正常。但是,如果我-在本地取出h 参数,即,如果我从本地主机连接到 MySQL,如下所示:
mysql -u<user> -p<password> -P9906 <schema>
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误 1045 (28000): 用户 ''@'localhost' 访问被拒绝(使用密码:是)
为什么会有这种行为?
我尝试为 localhost 和 127.0.0.1 设置端口转发,但错误仍然存在。
此外,在服务器上,为用户提供了 localhost 和 127.0.0.1 的权限。
有四(4)个场景需要注意
当您指定时,-P<port number>您必须使用 TCP/IP。因此,-h<IPAddress>会起作用。
当您指定-P<port number>而没有-h<IPAddress>,localhost则假定。发生这种情况时,不使用 TCP/IP,但使用 mysql 套接字文件进行身份验证。
当您指定-h127.0.0.1而没有-P<port number>,localhost则假定。发生这种情况时,不使用 TCP/IP,但使用 mysql 套接字文件进行身份验证。
当您使用 指定-h127.0.0.1时-P<port number>,localhost不会假定。将使用 TCP/IP,但必须正确定义用户。
鉴于错误消息:
错误 1045 (28000): 用户 ''@'localhost' 访问被拒绝(使用密码:是)
他们尝试登录的方式
mysql -u -p -P9906 -h127.0.0.1
你击中了场景 #4
在mysql.user,请确保您有
user@localhost (好的)user@127.0.0.1, (好的)user@% (不推荐但可以做)使用相同的密码(或不同的密码,如果需要)
成功登录后,运行此查询
SELECT USER(),CURRENT_USER();
Run Code Online (Sandbox Code Playgroud)
USER()报告您尝试在 MySQL 中进行身份验证的方式
CURRENT_USER()报告您如何被允许在 MySQL 中进行身份验证
添加正确的用户可以让您正确地进行身份验证。您的目标应该mysql.user是以这样一种方式设置用户,USER()并CURRENT_USER()具有相同的输出或至少尽可能特定于主机。