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

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


当前回答

我也遇到了类似的问题——当我第一次尝试以root用户登录MySQL时,它告诉我访问被拒绝。原来我忘了用sudo…

所以,如果你第一次尝试root失败了,试试:

sudo mysql -u root -p

然后输入密码,就可以了。

其他回答

这是以下两者之间的区别:

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

and

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

检查:

mysql> select user,host from mysql.user;
+---------------+----------------------------+
| user          | host                       |
+---------------+----------------------------+
| bill          | %                          | <=== created by first
| root          | 127.0.0.1                  |
| root          | ::1                        |
| root          | localhost                  |
| bill          | localhost                  | <=== created by second
+---------------+----------------------------+

命令

mysql -u bill -p

隐式访问'bill'@'localhost',而不是'bill'@'%'。

“bill”@“localhost”没有权限

你会得到错误:

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

解决问题:

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

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

对我来说,这个问题是由MySQL 5.7.2的一个新特性引起的:如果用户的插件字段为空,用户条目将被忽略。

设置为mysql_native_password以重新启用它们:

UPDATE user SET plugin='mysql_native_password' WHERE user='foo';
FLUSH PRIVILEGES;

请参阅MySQL 5.7.2的发布说明,在«Authentication notes»下。

由于某些原因(可能是因为我在4.1之前的密码散列被删除了),mysql_upgrade脚本没有设置默认的插件值。

我是通过注意/var/log/mysql/error.log中的以下警告消息发现的:

[警告]用户条目“foo”@“%”的插件值为空。该用户将被忽略,任何人都不能再使用该用户登录。

我把这个答案贴在这里,也许是为了让别人不用像我一样花那么多荒谬的时间来研究这个问题。

解决方案是删除匿名(Any)用户!

我在别人设置的服务器上也遇到了同样的问题。我通常不选择在安装MySQL时创建一个匿名用户,所以没有注意到这一点。最初,我以“root”用户登录,并创建了几个“正常”用户(也就是仅在dbs上以用户名作为前缀的用户),然后注销,然后继续验证第一个正常用户。我无法登录。既不通过phpMyAdmin,也不通过shell。事实证明,罪魁祸首是这个“任意”用户。

对我来说,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';