我已经从机器A到机器B创建了一个转发器(通过SSH)。机器B有一个运行MySQL实例,它使用unix_socket身份验证的根帐户:
+----------+-----------+-------------+
| User | Host | plugin |
+----------+-----------+-------------+
| root | localhost | unix_socket |
+----------+-----------+-------------+无论我使用什么密码(空白、Linux根密码等),我都无法以root用户身份从机器A登录:
machineA:~$ mysql -h 127.0.0.1 -P 1111 -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
machineA:~$ mysql -h 127.0.0.1 -P 1111 -u root
ERROR 1698 (28000): Access denied for user 'root'@'localhost'如果我试图使用不是根帐户的帐户从机器B登录到mysql,也会发生同样的情况。
如何登录MySQL?
发布于 2020-10-01 00:19:08
要直接或通过SSH隧道连接到远程MySQL服务器,您不能使用unix_socket身份验证插件,该插件需要本地访问DB操作系统上的unix文件。
unix_socket插件是使用一种特殊类型的文件(unix )实现的,它是*nix系统中进程间通信的一种形式。它允许您的mysql客户端与DB对话,并且它需要本地访问套接字文件(即:/tmp/mysql.sock)。当您连接到套接字时,unix_socket插件(服务器端)将获得连接到套接字的用户的uid (即:您的用户),并将自动验证您而不需要密码。
可能的解决办法:
如果使用非根用户连接到Machine,则需要创建与非根操作系统用户名相同的DB用户。
GRANT ALL PRIVILEGES ON *.* TO 'youruser'@'localhost' IDENTIFIED VIA unix_socket;现在,只需运行以下命令,就可以使用用户帐户和mysql客户机连接到mysql:
youruser:~$ mysql如果希望与根用户连接到DB,则需要访问根帐户或与用户关联的sudo策略来运行mysql客户端。
youruser:~$ sudo mysql显然,您可以启用对DB根帐户的常规经过身份验证的网络访问。这可能导致安全问题,因此最好将其限制在本地主机上:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'xxx' WITH GRANT OPTION;现在,您可以从任何本地操作系统帐户登录,如果您可以验证您的登录名:
youruser:~$ mysql -u root -phttps://stackoverflow.com/questions/64147040
复制相似问题