首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MySQL登录unix_socket帐户

问使用MySQL登录unix_socket帐户
EN

Stack Overflow用户
提问于 2020-09-30 23:20:34
回答 1查看 1.9K关注 0票数 1

我已经从机器A到机器B创建了一个转发器(通过SSH)。机器B有一个运行MySQL实例,它使用unix_socket身份验证的根帐户:

代码语言:javascript
复制
+----------+-----------+-------------+
| User     | Host      | plugin      |
+----------+-----------+-------------+
| root     | localhost | unix_socket |
+----------+-----------+-------------+

无论我使用什么密码(空白、Linux根密码等),我都无法以root用户身份从机器A登录:

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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用户。

代码语言:javascript
复制
GRANT ALL PRIVILEGES ON *.* TO 'youruser'@'localhost' IDENTIFIED VIA unix_socket;

现在,只需运行以下命令,就可以使用用户帐户和mysql客户机连接到mysql:

代码语言:javascript
复制
youruser:~$ mysql

如果希望与根用户连接到DB,则需要访问根帐户或与用户关联的sudo策略来运行mysql客户端。

代码语言:javascript
复制
youruser:~$ sudo mysql

显然,您可以启用对DB根帐户的常规经过身份验证的网络访问。这可能导致安全问题,因此最好将其限制在本地主机上:

代码语言:javascript
复制
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'xxx' WITH GRANT OPTION;

现在,您可以从任何本地操作系统帐户登录,如果您可以验证您的登录名:

代码语言:javascript
复制
youruser:~$ mysql -u root -p
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64147040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档