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

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


当前回答

在我的情况下,服务器托管我的代码是发送'@blablabla.amazonaws.com'在用户名的ed时,试图登录MySQL。所以我不得不将%.amazonws.com添加到我的主机的用户配置(dreamhost)中,它通过了

其他回答

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

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

mysql -u debian-sys-maint -p

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

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

MySQL account names consist of a user name and a host name, The name 'localhost' in host name indicates the local host also You can use the wildcard characters “%” and “_” in host name or IP address values. These have the same meaning as for pattern-matching operations performed with the LIKE operator. For example, a host value of '%' matches any host name, whereas a value of '%.mysql.com' matches any host in the mysql.com domain. '192.168.1.%' matches any host in the 192.168.1 class C network.

以上只是介绍:

实际上,用户“bill”@“localhost”和“bill”@“%”是不同的MySQL帐户,因此两者都应该使用自己的身份验证细节,如密码。

欲了解更多信息,请参阅http://dev.mysql.com/doc/refman//5.5/en/account-names.html

对我来说,root有一个默认密码

我用ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password '修改密码;这个方法奏效了

我为自己找到的最好的解决办法是。

我的用户是声纳,每当我试图从外部或其他机器连接到我的数据库,我得到错误

ERROR 1045 (28000): Access denied for user 'sonar'@'localhost' (using password: YES)

此外,我正在尝试从另一台机器和通过詹金斯工作我的URL访问是

alm-lt-test.xyz.com

如果你想远程连接,你可以用以下不同的方式指定它:

mysql -u sonar -p -halm-lt-test.xyz.com
mysql -u sonar -p -h101.33.65.94
mysql -u sonar -p -h127.0.0.1 --protocol=TCP
mysql -u sonar -p -h172.27.59.54 --protocol=TCP

要访问这个URL,你只需要执行以下查询。

GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'alm-lt-test.xyz.com' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'127.0.0.1' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'172.27.59.54' IDENTIFIED BY 'sonar';

当你运行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的行为是预期的,'%'将授予您登录。