【问题标题】:Updated Password Without Hashing it and Occurred a Dead end in MYSQL在没有散列的情况下更新密码并在 MYSQL 中出现死胡同
【发布时间】:2015-01-30 15:07:26
【问题描述】:

我运行了这个:mysql> update user set User = 'alic' and password = 'X' where User = 'r oot';

输出为:Query OK, 3 rows affected, 3 warnings (0.07 sec) Rows matched: 3 Changed: 3 Warnings: 3

我尝试使用 usernme = 'root' 和 password = '' 登录 PHPMYADMIN 我已登录,但问题是我没有任何权限,也没有表,也没有创建新帐户,也没有 Flushing Privileges!

每次我尝试更新用户表时,我都会得到Access Denied for ''@'Localhost'ERROR 1133 (42000): Can't find any matching row in the user table

如果你仔细观察''@''localhost; 表示有一个空的用户名''

当我尝试通过 PHPMYADMIN 更改密码时 弹出这条消息#1133 - Can't find any matching row in the user table

【问题讨论】:

  • 您刚刚说您将root 用户字段更改为alic 那么您为什么还要尝试使用root 了解一下我>
  • 我只是尝试了类似的方法当然不会更改像 root 这样重要的东西,这有点搞砸了 User 表的 user 列。卸载并重新安装以使 MySQL 恢复正常状态可能更简单。
  • @RiggsFolly 我目前正在使用 WAMP,如果我卸载它不会清理 SQL 数据吗?
  • 嗯,是的,但我认为你已经搞砸了,因为你已经无法访问 MySQL,因为你已经获取了 root 用户 ID 超级用户如果可能的话备份并备份您的站点代码。

标签: mysql phpmyadmin wamp


【解决方案1】:

因此,如果我没看错的话,您运行的 MySQL 语句将您的所有 root 帐户用户名重命名为 alic,密码为 X,但 X 没有经过哈希处理,所以基本上您无法以身份登录那些用户,因为密码永远不会匹配。

然后您尝试以 root 身份登录,这没有给您任何特权 - 因为您以匿名用户身份登录,因为 root 不再存在。

解决方法与您忘记了 MySQL 密码相同,在https://stackoverflow.com/a/6401963/2385479Resetting MySQL root password 得到答复。在 *nix 系统上,使用 --skip-grant-tables 启动 MySQL 并通过命令行客户端再次设置密码,但您需要替换 alic,说明使用 root。它看起来好像您使用的是 Windows,所有系统的详细说明都可以在 MySQL 手册中找到https://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html

总结 Windows 说明:

  1. 从服务控制面板停止 MySQL
  2. 创建一个包含UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; FLUSH PRIVILEGES; 变体的文本文件
  3. 从命令行启动服务器,如下所示:C:\> C:\mysql\bin\mysqld-nt --init-file=C:\\mysql-init.txt 引用您在上面创建的文件的实际路径。

同样,在适当的地方替换用户名 alic 而不是 root、您想要的新密码以及步骤 2 中文本文件的路径。

获得alic 的有效密码后,您可以重新登录并将三个alic 用户重命名为`root。

【讨论】:

    【解决方案2】:

    Isaac 让我想起了这种可能性,下面是如何在 Windows 上使用 WAMPServer 来做到这一点。

    如何重置root 用户密码。

    停止mysql服务

    wampmanager -> MySQL -> Service -> Stop Service
    

    编辑 my.ini 文件

    wampmanager -> MySQL -> my.ini
    

    在ini文件中找到[wampmysqld]部分

    根据您安装的 WAMPServer 是 32 位还是 64 位,直接在 [wampmysqld] 或 [wampmysqld64] 部分之后添加这一行。

    skip-grant-tables
    

    重启mysql服务。

    wampmanager -> MySQL -> Service -> Start/Resume Service
    

    打开 MySQL 控制台

    wampmanager -> MySQL -> MySQL Console
    

    现在我们要重置root用户的密码,当然这可以用来重置任何用户的密码。

    mysql>命令提示符处输入以下2条命令,每条命令在行尾加分号,每行后按回车,向mysql发出命令。

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE user='root';
    FLUSH PRIVILEGES;
    

    或者在你的情况下:

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE user='alic';
    FLUSH PRIVILEGES;
    

    请注意,更新应该报告它已经更新了不止一行,因为实际上有 3 个用户帐户的用户 ID 为“root”,每个帐户具有不同的域,即 127.0.0.1、localhost 和 :: 1

    现在在mysql命令promt中输入'quit'以存在mysql。

    停止mysql服务

    wampmanager -> MySQL -> Service -> Stop Service
    

    编辑 my.ini 文件

    wampmanager -> MySQL -> my.ini
    

    在ini文件中找到[wampmysqld]部分

    Remove the 'skip-grant-tables' parameter we added earlier.
    **DO NOT Leave this parameter in the ini file its a HUGH security hole.**
    

    重启mysql服务。

    wampmanager -> MySQL -> Service -> Start/Resume Service
    

    您现在应该可以使用用户 ID 'root' 和刚刚为该用户设置的新密码登录 phpmyadmin。

    【讨论】:

    • 嗯,我猜你原来的改变完全破坏了 MySQL。我认为您应该考虑卸载 WAMPServer,完全删除 \wamp 文件夹(卸载会留下一些文件),然后重新安装。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多