首先让我提一下,我已经看了很多建议的问题,但没有找到相关的答案。这就是我正在做的。

我连接到Amazon EC2实例。我可以用这个命令登录MySQL根目录:

mysql -u root -p

然后我用host %创建了一个新的用户帐单

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

授予用户bill的所有权限:

grant all privileges on *.* to 'bill'@'%' with grant option;

然后我退出root用户,尝试用bill登录:

mysql -u bill -p

输入正确的密码并得到以下错误:

错误1045(28000):用户“账单”@“localhost”(使用密码:YES)的访问被拒绝


当前回答

我有类似的问题,因为我的密码包含“;”字符破坏我的密码时,我第一次创建它。如果对你有帮助,请谨慎使用。

其他回答

我也有同样的问题,但在我的情况下,解决方案是由eggyal的评论解决的。我也有一个匿名用户,但删除它并不能解决问题。'FLUSH PRIVILEGES'命令仍然有效。

让我感到惊讶的是,我用MySQL Workbench创建了这个用户,我本来希望它能执行完成任务所需的所有功能。

这可能只适用于少数人,但事实就是这样。不要用感叹号!在你的密码里。

我做到了,并使用MariaDB得到了上述错误。当我把它简化成数字和字母时,它是可行的。其他字符,如@和$工作得很好-我在同一实例的不同用户中使用了这些字符。

这个地址的第五次回复让我找到了解决办法。

所以对我来说,这个问题与我映射的端口有关。

3306 => 3306不工作(因为我有一个本地mysql运行)

3307 => 3306工作!

这是在建立ssh隧道的上下文中:

ssh -N -L 3307:rdsDns:3306 ec2User@ec2Dns -i key.pem -v

3307为本端端口,3306为远端端口。

当你运行mysql -u bill -p时,localhost被解析为你的ip,因为它是127.0.0.1,在你的/etc/hosts文件中,默认的127.0.0.1 localhost存在。因此,mysql将您解释为bill@localhost,而不是授予bill@'%'。这就是为什么有2个不同的记录根用户的结果选择主机,用户从mysql.user;查询

有两种方法可以处理这个问题。

一个是指定一个ip,当您尝试登录时,该ip不会被/etc/hosts文件反向解析。例如,服务器的ip为10.0.0.2。执行mysql -u bill -p -h 10.0.0.2命令即可登录。如果输入select user();,将得到bill@10.0.0.2。当然,在/etc/hosts文件中,任何域名都不应该解析为这个ip。

其次,您需要授予该特定域名的访问权限。对于bill@localhost,您应该调用命令授予*上的所有特权。*到bill@localhost,通过“billpass”识别;. 在这种情况下,你可以用mysql -u bill -p命令登录。登录后,选择user();命令返回bill@localhost。

但这仅适用于您尝试登录同一主机上的mysql服务器。从远程主机,mysql的行为是预期的,'%'将授予您登录。

操作系统:windows

我的错误信息是:

MySQL ERROR 1045(28000):用户'root'@'localhost'(使用密码:YES)被拒绝访问

我的原因是,我没有打开cmd与管理员权限。

所以我的解决方案是作为管理员打开cmd,然后它就工作了。