无法从命令行以非 root 用户身份登录 mysql

无法从命令行以非 root 用户身份登录 mysql

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

mysql>从 mysql.user 中选择用户、主机、密码;
+---------+-----------+----------------------------------------------------------+
| 用户 | 主机 | 密码 |
+---------+-----------+----------------------------------------------------------+
| 根 | 本地主机 | *9CAF1C22F1F66A8C47C74E7F6700391F0AB817F0 |
| 根| 127.0.0.1 | *C453FFD4FD2470D5CD56BB9A229BDC7388F3A170 |
|数据狗 |本地主机 | *AEB79FF15C0A9CA185F3768235927ADDD9667C85 |
| 轨道 | 本地主机 | *9CAF1C22F1F66A8C47C74E7F6700391F0AB817F0 |
+---------+-----------+----------------------------------------------------------+

rails 用户的授权如下:

mysql> 显示“rails”@“localhost”的授权;';
+------------------------------------------------------------------------------------------------------------------------+
| 为 rails@localhost 提供资助 |
+------------------------------------------------------------------------------------------------------------------------+
| 授予'rails'@'localhost' 对 *.* 的使用权,密码为 '*9CAF1C22F1F66A8C47C74E7F6700391F0AB817F0',需要 SSL |
| 授予 `resumecompanion_staging` 的所有权限。* 至 'rails'@'localhost' |
+------------------------------------------------------------------------------------------------------------------------+

请注意,我已将 root 用户密码和 rails 密码设置为相同。我这样做是为了确认我输入了正确的密码,但仍然不起作用。

当我尝试使用 rails 用户登录时,我看到以下内容:

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

有人知道我做错了什么吗?

谢谢,

乔什

答案1

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

首先,要求与 localhost 建立 SSL 连接是完全没有意义的。SSL 或 TLS 提供运输安全对于不会离开实际系统的通信,您不需要它,它不会提供任何额外的安全性,而只会提供额外的开销。

此外,Linux/UNIX 上的官方 MySQL 库将关键字本地主机与您预期的不同,将使用 Unix 套接字,而不是 TCP。从手动的

在 Unix 上,MySQL 程序将主机名本地主机具体来说,与其他基于网络的程序相比,这种方式可能与您预期的不同。对于与 localhost 的连接,MySQL 程序尝试使用 Unix 套接字文件连接到本地服务器。即使给出了 --port 或 -P 选项来指定端口号,也会发生这种情况。... 您还可以使用选项明确指定连接协议--protocol=TCP

使用套接字比使用 TCP/IP 具有更高的性能,并且据我所知,套接字不支持 SSL(并且也不需要)。

如果您确实强制建立 TCP 连接,那么您也需要使用 GRANT 通过 TCP 访问,GRANT ... TO 'rails'@'127.0.0.1' ...因为授予连接localhost意味着使用 Unix 套接字。

特别没用的一点是,对于错误消息,MySQL 遵循惯例对 ip 地址进行反向 DNS 查找,这会将 ip 地址转换127.0.0.1本地主机

相关内容