无法从命令行以非root用户身份login到mysql

我正在build立一个MySQL服务器,我正尝试创build一个非特权用户来login我创build的每个数据库。 我可以成功从控制台以root身份login,但是当我尝试以“rails”用户身份login时,失败。 这是我的用户的样子:

 mysql>从mysql.user中select用户,主机,密码;
 + --------- + ----------- + --------------------------- ---------------- +
 | 用户| 主机| 密码|
 + --------- + ----------- + --------------------------- ---------------- +
 |  root |  localhost |  * 9CAF1C22F1F66A8C47C74E7F6700391F0AB817F0 |
 |  root |  127.0.0.1 |  * C453FFD4FD2470D5CD56BB9A229BDC7388F3A170 |
 |  datadog |  localhost |  * AEB79FF15C0A9CA185F3768235927ADDD9667C85 |
 | 铁轨|  localhost |  * 9CAF1C22F1F66A8C47C74E7F6700391F0AB817F0 |
 + --------- + ----------- + --------------------------- ---------------- +

对于rails用户的授权如下所示:

 mysql>显示'rails'@'localhost'的授权;  “;
 + ------------------------------------------------- -------------------------------------------------- ----------------------- +
 | 为rails @ localhost |授予金额
 + ------------------------------------------------- -------------------------------------------------- ----------------------- +
 |  *。* TO'rails'@'localhost'IDENTIFIED BY PASSWORD'* 9CAF1C22F1F66A8C47C74E7F6700391F0AB817F0'需要SSL |
 | 在`resumecompanion_staging`上授予所有特权。* TO'rails'@'localhost'|
 + ------------------------------------------------- -------------------------------------------------- ----------------------- +

请注意,我已经将root用户密码和导轨密码设置为相同。 我这样做,以确认我input正确的密码,它仍然无法正常工作。

当我尝试用rails用户login时,我看到:

 mysql -u rails -h localhost -p --protocol = TCP resumecompanion_staging
input密码:
错误1045(28000):访问被拒绝用户'rails'@'localhost'(使用密码:是)

有没有人有任何想法我做错了?

谢谢,

玩笑

GRANT ... TO 'rails'@'localhost' ... REQUIRE SSL

对于需要使用SSL连接到/从本地主机的初学者是完全没有意义的。 SSL或TLS提供传输安全性 ,您不需要通信不会离开实际系统,这不会提供任何额外的安全性和额外的开销。

另外,Linux / UNIX上的官方MySQL库将关键字localhost视为与您所期望的不同,并将使用Unix套接字,而不是TCP。 从手册 :

在Unix上,MySQL程序专门处理主机名localhost ,与其他基于networking的程序相比,这种方式可能与您期望的不同。 对于连接到本地主机,MySQL程序试图通过使用Unix套接字文件连接到本地服务器。 即使给出了–port或-P选项来指定端口号,也会发生这种情况。 …您也可以使用--protocol=TCP选项明确指定连接协议。

使用套接字比使用TCP / IP和AFAIK提供更多的性能,套接字不支持SSL(也不需要)。

如果你强制build立一个TCP连接,你还需要通过TCP授予访问权限,使用GRANT ... TO 'rails'@'127.0.0.1' ... ,因为从localhost授予连接意味着Unix套接字。

特别没有帮助的是,对于错误消息,MySQL遵循约定对IP地址进行反向DNS查找,这会将IP地址127.0.0.1转换为本地主机