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

我连接到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)的访问被拒绝


当前回答

操作系统:windows

我的错误信息是:

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

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

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

其他回答

调试总结

检查输入错误:用户名或密码。 检查主机名并与mysql进行比较。用户表主机名。 检查用户是否存在。 检查host中是否包含IP地址或主机名。

在工作中,您很有可能多次遇到这个问题。这个问题发生在我的大多数时候,由于输入错误的用户名或密码。虽然这是其中一个原因,但还有很多其他的机会你可能会遇到这个问题。有时,它看起来非常相似,但当你深入挖掘时,你会发现导致这个错误的多种因素。这篇文章将详细解释大多数常见的原因,并解决这个问题。

可能的原因:

情况1:输入错误:用户名或密码。

这是导致此错误的最常见原因。如果您输入了错误的用户名或密码,您肯定会得到这个错误。

解决方案:

解决这类错误的方法非常简单。只需输入正确的用户名和密码。此错误将被解决。万一你忘记密码,你可以重置用户名/密码。 如果您忘记了admin / root帐户的密码,有许多方法可以重置/重新获取root密码。我将发布另一篇关于如何重置根密码,如果你忘记根密码。

案例2:从错误的主机访问。

MySQL提供了基于主机的用户访问限制作为安全特性。在我们的生产环境中,我们习惯于将访问请求限制为应用程序服务器。这个特性在许多生产场景中非常有用。

解决方案:

When you face this type of issue, first check whether your host is allowed or not by checking the mysql.user table. If it is not defined, you can update or insert new record to mysql.user table. Generally, accessing as a root user from remote machine is disabled and it is not a best practice, because of security concerns. If you have requirements to access your server from multiple machines, give access only to those machines. It is better not to use wildcards (%) and gives universal accesses. Let me update the mysql.user table, now the demouser can access MySQL server from any host.

情况3:服务器上不存在用户。

当您试图访问的用户在MySQL服务器上不存在时,就会发生这种类型的错误。

解决方案:

当你遇到这种类型的问题,只要检查用户是否存在于mysql。用户表。如果记录不存在,则用户无法访问。如果要求该用户访问,则使用该用户名创建一个新用户。

案例4:混合使用基于数字和名称的主机。

重要的几点

在定义用户主机时不建议使用通配符,尽量使用确切的主机名。 从远程机器禁用root登录。 使用代理用户概念。

与此主题相关的其他概念很少,详细讨论这些主题是本文的不同范围。我们将在接下来的文章中研究以下相关主题。

如果你忘记了MySQL服务器的root密码,该怎么办? MySQL访问权限问题和用户相关的表。 具有最佳实践的MySQL安全特性。

我希望这篇文章将帮助你修复MySQL错误代码1045拒绝用户访问MySQL。

我希望你在mysql中删除debian-sys- maintenance用户没有造成更大的损害

让你的mysql守护进程正常运行。启动mysql客户端,如下所示

mysql -u debian-sys-maint -p

在另一个终端,cat /etc/mysql/debian.cnf文件。该文件包含密码;当提示输入密码时,粘贴该密码。

http://ubuntuforums.org/showthread.php?t=1836919

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

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

3307 => 3306工作!

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

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

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

省得你自己头疼……您的问题可能是口令周围没有引号。至少我的案子绕了我三个小时。

[client]
user = myusername
password = "mypassword"   # <----------------------- VERY IMPORTANT (quotes)
host = localhost

http://dev.mysql.com/doc/refman/5.7/en/option-files.html

搜索“这是一个典型的用户选项文件:”,看看他们在那里陈述的例子。祝你好运,我希望能为别人节省一些时间。

如果您使用旧版本的MySQL UI(如SQLYoug),生成的密码带有错误的散列,也会出现这个问题。

用SQL脚本创建用户可以解决这个问题。