75

无法为使用3.5.2.2 - phpMyAdmin for 5.5.27 - MySQL的用户设置密码。以用户身份登录时尝试设置密码时phpMyAdmin,会弹出以下错误:

#1133 - Can't find any matching row in the user table

以 root 身份登录时,会弹出以下密码设置成功消息。

SET PASSWORD FOR 'user'@'%' = PASSWORD( '***' )

在任何一种情况下,密码都不会设置并保持当前状态,为空白。

4

10 回答 10

113

我在不同的上下文中(不在 phpMyAdmin 中)使用 MySQL 时遇到了这个错误。GRANT 和 SET PASSWORD 命令在 mysql.user 表中列出的特定现有用户上失败。就我而言,它是通过运行修复的

FLUSH PRIVILEGES;

该命令的文档

从 mysql 数据库中的授权表重新加载权限。

作为 GRANT 和 CREATE USER 语句的结果,服务器将信息缓存在内存中。该内存不会被相应的 REVOKE 和 DROP USER 语句释放,因此对于执行许多导致缓存的语句实例的服务器,内存使用量会增加。可以使用 FLUSH PRIVILEGES 释放此缓存内存。

显然,用户表缓存已达到不一致的状态,导致出现此奇怪的错误消息。更多信息可在此处获得。

于 2013-07-02T22:23:21.550 回答
53

如果尝试为不存在的用户授予权限,则可能会发生此错误。

我不清楚 MySQL 认为什么是不存在的用户。但是我怀疑如果可以通过表中的名称(列User)和主机(列Host)找到用户,则 MySQL 认为用户存在user

如果尝试向可以通过他的姓名(列User)但不能通过他的姓名和主机(列UserHost)找到的用户授予权限,并且不提供密码,则会发生错误。

例如,以下语句触发错误:

grant all privileges on mydb.* to myuser@'xxx.xxx.xxx.xxx';

这是因为,在没有指定密码的情况下,MySQL 无法创建新用户,因此会尝试查找现有用户。但是在表中找不到具有名称myuser和主机的用户。xxx.xxx.xxx.xxxuser

而提供密码,则允许语句成功执行:

grant all privileges on mydb.* to myuser@'xxx.xxx.xxx.xxx' identified by 'mypassword';

如果新的“MySQL 用户”是相同的“应用程序用户”,请确保重用您认为存在的该用户的相同密码。

通过刷新权限完成操作:

flush privileges;
于 2017-11-20T11:28:56.407 回答
14

我遇到了这个问题,但在我的情况下,“phpmyadmin”用户的密码与/etc/phpmyadmin/config-db.php

一旦我更新了“phpmyadmin”用户的密码,错误就消失了。

这些是我采取的步骤:

  1. 以 root 身份登录 mysql:mysql -uroot -pYOUR_ROOT_PASS
  2. 更改为“mysql”数据库:use mysql;
  3. 更新“phpmyadmin”用户的密码: UPDATE mysql.user SET Password=PASSWORD('YOUR_PASS_HERE') WHERE User='phpmyadmin' AND Host='localhost';
  4. 刷新权限:FLUSH PRIVILEGES;

完毕!!它对我有用。

于 2013-08-21T21:14:29.690 回答
6

事实证明,错误确实非常模糊!

1) 以 root 身份登录时设置密码,因为它正在更新 MySql 下用户表中的用户/密码字段。

2)当以用户身份登录时,密码实际上并没有改变,即使在 MySql 的用户表中指定了一个,config.inc.php 文件也允许在没有密码的情况下进行身份验证。

解决方案:

将以下值更改falseconfig.inc.php中的值。

$cfg['Servers'][$i]['AllowNoPassword'] = true;

所以它读

$cfg['Servers'][$i]['AllowNoPassword'] = false;

在 MySql 用户表中更改用户的主机Any更改%用户的主机。localhost这可以通过phpMyAdmin控制台轻松实现。

这两项更改允许我使用其密码作为用户进行身份验证,并不允许我在没有密码的情况下进行身份验证。

它还允许用户在以用户身份登录时更改其密码。

似乎所有权限,其余的已通过这两个更改修复。

于 2012-10-14T19:18:07.867 回答
4

阐述斯蒂芬的回答

当我尝试root通过运行以下命令将特定数据库的远程连接权限授予 MySQL 服务器上的用户时出现此错误:

USE database_name;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

这给出了一个错误:

ERROR 1133 (42000): Can't find any matching row in the user table

这是我修复它的方法

首先,确认您的MySQL服务器允许远程连接。使用您喜欢的文本编辑器打开 MySQL 服务器配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

向下滚动到bind-address行并确保将其注释掉或替换为0.0.0.0(以允许所有远程连接)或替换为您希望远程连接的IP 地址。

进行必要的更改后,保存并退出配置文件。通过重新启动 MySQL 服务来应用对 MySQL 配置文件所做的更改:

sudo systemctl restart mysql

接下来,登录到安装它的服务器上的 MySQL 服务器控制台:

mysql -u root -p

输入你的mysql用户密码

检查您想要的用户已经可以访问的主机。在我的情况下,用户是root

SELECT host FROM mysql.user WHERE user = "root";

这给了我这个输出:

+-----------+
| host      |
+-----------+
| localhost |
+-----------+

接下来,我运行下面的命令,这与之前抛出错误的命令类似,但请注意我这次添加了密码:

USE database_name;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'my-password';

注意%授予用户从网络上所有主机的远程访问权限。您可以使用以下命令指定要授予用户访问权限的各个主机的 IP 地址 -GRANT ALL PRIVILEGES ON *.* TO 'root'@'Ip-Address' IDENTIFIED BY 'my-password';

之后,我检查了用户现在可以访问的主机。在我的情况下,用户是root

SELECT host FROM mysql.user WHERE user = "root";

这给了我这个输出:

+-----------+
| host      |
+-----------+
| %         |
| localhost |
+-----------+

最后,您可以尝试使用以下命令从另一台服务器连接到 MySQL 服务器:

mysql -u username -h mysql-server-ip-address -p

其中u代表userh代表mysql-server-ip-addressp代表password。所以在我的情况下是:

mysql -u root -h 34.69.261.158 -p

输入你的mysql用户密码

您应该根据您的MySQL服务器版本获得此输出:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

资源如何允许远程连接到 MySQL

就这样。

我希望这有帮助

于 2020-10-05T21:23:25.883 回答
2

将 newdb.* 上的所有权限授予由“密码”标识的 newuser@localhost;

于 2017-08-28T04:23:00.850 回答
2

对于像我这样犯错的人。

我正在使用命令

SET PASSWORD FOR root = 'elephant7'

更新root用户的密码,我得到了同样的错误。我在所有答案中都尝试了上面提到的所有事情,但我没有成功,然后在搜索了一下之后我发现了答案,

MySQL 帐户名由用户名和主机名组成。这可以为可以从不同主机连接的同名用户创建帐户。

https://dba.stackexchange.com/

然后我使用了命令

SET PASSWORD FOR 'root'@'localhost'=PASSWORD('mynewpasword');

这里'root'@'localhost'做到了,命令奏效了。

希望这对某人有益。

于 2021-03-26T19:27:06.007 回答
0

如果您使用的是 PHPMyAdmin,则必须以 root 身份登录才能更改 root 密码。在用户中输入root而不是将密码留空而不是更改密码。

于 2013-08-15T17:38:14.447 回答
-1

就我而言,我刚刚重命名了 Mysql 用户,该用户将在基于 gui 的数据库工具 (DbVisualizer) 上更改他的密码。我尝试“设置密码”的终端不起作用(MySQL 错误 #1133)。

然而,这个答案对我有用,即使在更改密码后,“SET PASSWORD”命令也不起作用。

关闭终端并打开新终端后,该命令运行良好。

于 2017-03-24T09:22:36.440 回答
-1

我想现在答案就在这里:https ://bugs.mysql.com/bug.php?id=83822

所以,你应该写:

将 mydb.* 上的所有权限授予 myuser@'xxx.xxx.xxx.xxx' 由 'mypassword' 识别;

我认为这可能可行:

为 myuser@'xxx.xxx.xxx.xxx' 设置密码'old_password' = PASSWORD('new_password');

于 2018-01-31T10:51:08.337 回答