82

使用此命令

GRANT ALL PRIVILEGES ON *.* to 'brian'@'%' identified by 'password';

我尝试使用以下方式登录:

 mysql -u brian -ppassword

错误是:

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

我以 root 身份执行此操作,并且确实尝试刷新权限。

我尝试过无数用户,但它似乎不起作用。我可以创建一个没有密码的用户并且登录有效。命令行和来自 phpmyadmin

还要检查用户是否在 mysql.user 中。

布赖恩节目的节目资助:

| GRANT ALL PRIVILEGES ON *.* TO 'brian'@'%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |
4

13 回答 13

189

您可能会遇到这个永久性的 MySQL 问题,其中 user 表中的默认用户之一是'' @ localhost,这最终会拒绝localhost表中的所有用户。我要做的是mysqldump数据库mysql并在表中查找此条目User;如果找到,将其删除并刷新权限。

有关更多详细信息,请参阅https://dev.mysql.com/doc/refman/5.5/en/connection-access.html

一种常见的误解是,对于给定的用户名,当服务器尝试查找连接的匹配项时,首先使用明确命名该用户的所有行。这不是真的。前面的示例说明了这一点,其中 jeffrey 来自 h1.example.net 的连接首先不是与包含“jeffrey”作为用户列值的行匹配,而是与没有用户名的行匹配。结果,jeffrey 被验证为匿名用户,即使他在连接时指定了用户名。

于 2009-09-11T17:47:56.490 回答
46

这是由匿名用户引起的问题。一旦我安装了 MySQL,我总是运行

shell> mysql_secure_installation 

并选择设置/更改root密码,删除匿名用户,禁止远程root登录,删除测试数据库。这将删除匿名用户并保护您的安装。它还应该解决您遇到的问题。

于 2013-06-21T14:19:23.653 回答
22
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
于 2013-04-27T10:41:46.397 回答
20

此处提供的解决方案均无效。经过大量错误和试验后,我意识到密码中有特殊字符。更改没有特殊字符的密码解决了这个问题

于 2015-06-03T21:05:33.240 回答
5

mysql 文档有这样的说法:(来自http://dev.mysql.com/doc/refman/5.1/en/adding-users.html):

其中两个帐户的用户名是monty,密码是some_pass。这两个帐户都是超级用户帐户,具有执行任何操作的完全权限。该'monty'@'localhost'帐户只能在从本地主机连接时使用。该'monty'@'%'帐户使用'%'通配符作为主机部分,因此可用于从任何主机进行连接。

必须同时拥有两个帐户monty才能从任何地方连接monty。如果没有 localhost 帐户,当 monty 从本地主机连接时,由 localhost 创建的匿名用户帐户mysql_install_db将优先。结果,monty将被视为匿名用户。原因是匿名用户帐户Host比帐户具有更具体的列值'monty'@'%',因此在用户表排序顺序中排在前面。

考虑到这一点,我建议您创建一个'brian'@'localhost'具有相同权限的用户。

于 2012-12-20T22:56:24.557 回答
4

最后这对我有用:

MariaDB [(none)]> drop user ''@'localhost';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
于 2021-06-30T10:40:57.700 回答
3

我认为“罗素席尔瓦”是对的……

我创建了一个用户

CREATE USER 'username'@'%' PASSWORD='userpassword';

但我无法登录此帐户。控制台告诉我

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

所以我创建了一个用户名相同的用户,除了将“%”更改为“localhost”,我终于可以以“用户名”登录。不过对我来说这很奇怪。

于 2013-04-29T02:58:40.130 回答
2

您在赠款声明中忘记了有关 brian 的报价。试试这样:

GRANT ALL PRIVILEGES ON *.* to 'brian'@'%' identified by 'password';

于 2009-09-11T17:47:57.067 回答
1

就我而言,这是由于我单击了“SSL:REQUIRE SSL”(在 phpmyadmin 中)。当我将其更改为“REQUIRE NONE”时,我可以登录。

于 2017-09-16T20:25:39.983 回答
1

使用以下命令更改为本机密码:

ALTER USER 'username'@'hostname' IDENTIFIED WITH mysql_native_password BY 'password';
于 2019-12-18T20:11:30.873 回答
0

您还可以从另一台主机连接,然后绕过 localhost 匿名用户,您可以将其删除并刷新权限:

mysql -u brian -ppassword -h 'other_host_than_localhost'
于 2014-02-26T15:18:56.307 回答
0

我在升级到 17.04 后尝试连接到在 Ubuntu 上运行的 Maria DB 时遇到了类似的问题。

默认设置为仅在 localhost 127.0.0.1 上侦听。

为了让 MySQL/Maria 监听所有可用的端口和接口,我需要明确指定 bind-address=0.0.0.0。我将此行添加到文件的末尾/etc/mysql/my.cnf,即

...
[client-server]

# Import all .cnf files from configuration directory

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
bind-address=0.0.0.0

然后...

sudo /etc/init.d/mysql restart 
于 2017-04-20T19:49:09.637 回答
-1

即使在验证我没有输入错误密码后,我也出现了类似的问题,我无法登录。以下两个步骤解决了我的问题。

  1. 删除测试数据库
  2. 删除匿名用户
于 2015-09-04T07:27:50.177 回答