【问题标题】:MySQL Error #1133 - Can't find any matching row in the user tableMySQL 错误 #1133 - 在用户表中找不到任何匹配的行
【发布时间】:2012-10-04 08:30:44
【问题描述】:

无法为使用 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( '***' )

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

【问题讨论】:

    标签: mysql phpmyadmin mysql-error-1064


    【解决方案1】:

    对于像我这样犯错的人。

    我正在使用命令

    SET PASSWORD FOR root = 'elephant7'

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

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

    https://dba.stackexchange.com/

    然后我使用了命令

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

    'root'@'localhost' 在这里成功了,命令奏效了。

    希望这对某人有益。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

      虽然提供密码,但允许语句成功执行:

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

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

      通过刷新权限完成操作:

      flush privileges;
      

      【讨论】:

      • 我要强调这句话:但我怀疑如果用户表中的用户名(User 列)和主机(Host 列)可以找到一个用户,那么 MySQL 认为该用户存在。
      • 你的第二行解决了我的问题。但我仍然不明白这里的问题是什么:目标用户和主机存在于user 表中,但GRANT ALL ON db.* TO 'me'@'192.168.1.0/255.225.255.0' 不起作用。使用密码。
      • 当您说它有效时,我们想知道您的预期结果是什么。我从我的软件词汇表中禁止工作词。没有冒犯的意思。您是否期望您的授权声明为现有用户添加权限?还是创建一个新用户?
      【解决方案3】:

      阐述Stephane's answer

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

      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-Addresses 您希望从中进行远程连接。

      进行必要的更改后,保存并退出配置文件。通过重新启动 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代表用户h代表mysql-server-ip-addressp 代表密码。所以在我的情况下是:

      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> 
      

      资源How to Allow Remote Connections to MySQL

      就是这样。

      我希望这会有所帮助

      【讨论】:

        【解决方案4】:

        我想现在答案就在这里: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');

        【讨论】:

        • 我们鼓励您在回答时尝试解释您在做什么以及解决方案为何有效,尤其是在涉及 5 年前的问题时。
        • 没有解释x是否应该是占位符,如果不是占位符,一般也不能解决动态ip访问的问题。
        【解决方案5】:

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

        【讨论】:

        • 是的,去过那里
        【解决方案6】:

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

        但是this answer 对我有用,即使在更改密码后,“SET PASSWORD”命令也不起作用。

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

        【讨论】:

          【解决方案7】:

          我遇到了这个问题,但在我的情况下,“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;

          完成!!它对我有用。

          【讨论】:

          • 对我有用的是“FLUSH PRIVILEGES”命令。谢谢。
          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

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

            FLUSH PRIVILEGES;
            

            此命令的documentation 表示

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

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

            显然用户表缓存已达到不一致的状态,导致出现此奇怪的错误消息。更多信息请见here

            【讨论】:

            • 我在重启数据库后遇到了这个问题,flush 命令有效。谢谢!
            【解决方案10】:

            事实证明,错误确实很模糊!

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

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

            解决方案:

            config.inc.php中将以下值更改为false

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

            这样它就读起来了

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

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

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

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

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

            【讨论】:

            • 不是正确的解决方案。请查看pdg137's answer,OP 应该将其标记为已接受。
            猜你喜欢
            • 2015-02-11
            • 2019-05-21
            • 2019-05-11
            • 2020-08-14
            • 2016-04-13
            • 1970-01-01
            • 1970-01-01
            • 2013-05-18
            • 1970-01-01
            相关资源
            最近更新 更多