看来,接受来自 localhost 的用户的解决方案是使用 @'localhost' 创建用户的副本(除了 user@'%')。我非常努力地想理解这里的逻辑,因为“任何主机”通配符“%”不会接受 localhost 连接,这似乎有点疯狂。在处理大量用户时,创建第二个用户并不实用。如果用户更改了自己的密码,则另一个用户不会受到影响。
有没有什么解决方法可以允许用户@'%'接受本地主机连接?
答案1
连接到 mysqld 的方式localhost
强制 mysql 客户端通过套接字文件进行身份验证。
通过通配符连接%
要求通过 TCP/IP 连接到 mysqld。
如果有myuser@'%'
,其密码为mys3cr3t
,并且您不想添加myuser@'localhost'
,我建议您执行以下操作:
像这样连接到mysql
mysql --protocol=tcp -umyuser -pmys3cr3t
使用--protocol=tcp
强制 mysql 客户端程序使用 TCP/IP 进行连接
连接后,运行此查询
SELECT USER(),CURRENT_USER();
用户()报告您如何在 MySQL 中进行身份验证
当前用户()报告您被允许在 MySQL 中进行身份验证的方式
答案2
您需要删除匿名用户,因为MySQL 的模式匹配将首先匹配它们。
跑过mysql_secure_installation
脚本或手动删除它们。