MySQL 错误 1045:尽管凭据正确,但用户 'bill'@'localhost' 的访问被拒绝
尝试访问远程 MySQL 数据库时通过命令行,用户偶尔可能会遇到“Error 1045: Access Denied for user 'bill'@'localhost'”消息,表明尽管提供了正确的登录凭据,连接仍被拒绝。
调查:
用户创建了一个名为“bill”的新用户,授予该用户所有必要的权限,然后退出 root 用户帐户。但是,随后尝试从本地计算机(“localhost”)以用户“bill”身份登录会导致错误。
根本原因:
通常,这出现此问题的原因是“mysql.user”表中存在匿名用户(用户名为空且“localhost”作为主机的用户)。从“本地主机”连接时,服务器会根据最具体的主机名或 IP 地址优先考虑匹配的用户帐户。
解决方案 1:删除匿名用户
解决方法问题,从 'mysql.user' 表中删除匿名用户:
DELETE FROM mysql.user WHERE user = '' AND host = 'localhost';
解决方案2(对于 MySQL 版本 >= 5.7):
如果使用 MySQL 5.7 或更高版本,您可以通过 'skip_name_resolve' 变量禁用匿名帐户:
SET GLOBAL skip_name_resolve = ON;
额外注意事项:
套接字连接:
在提供的示例中,用户通过套接字进行连接。确保正确指定“用户”和“密码”字段非常重要,因为在登录路径中配置的任何匿名用户都可能会覆盖提供的凭据。
TCP 连接:
通过 TCP 连接时,应使用 -h 标志来指定主机名或 IP 地址,而不是本地主机:
mysql -u bill -p -hremote_hostname
空用户名:
某些客户端库无法正确处理空用户名。应使用“@”符号代替“”来表示匿名用户:
mysql -u'@'localhost'-ppassword
以上是为什么 MySQL 会返回错误 1045:即使使用正确的凭据,访问也被拒绝?的详细内容。更多信息请关注PHP中文网其他相关文章!