我正在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转换为本地主机 。