如何解密 MySQL 密码
你真的不能,因为它们是经过散列而不是加密的。
这是当前 MySQL 使用的 PASSWORD 函数的本质。您可以从 sql 终端执行它:
mysql> SELECT SHA1(UNHEX(SHA1("password")));
+------------------------------------------+
| SHA1(UNHEX(SHA1("password"))) |
+------------------------------------------+
| 2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
+------------------------------------------+
1 row in set (0.00 sec)
如何更改或检索这些?
如果您在登录 debian 或 ubuntu 系统时遇到问题,请先尝试此操作(感谢https://askubuntu.com/questions/120718/cant-log-to-mysql 的 tohuwawohu):
$ sudo cat /etc/mysql/debian.conf | grep -i password
...
password: QWERTY12345...
然后,使用 debian 维护用户登录:
$ mysql -u debian-sys-maint -p
password:
最后,修改用户密码:
mysql> UPDATE mysql.user SET Password=PASSWORD('new password') WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> quit;
当我查看 PHPmyAdmin 时,密码是加密的
相关,如果需要dump用户数据库获取相关信息,试试:
mysql> SELECT User,Host,Password FROM mysql.user;
+------------------+-----------+----------------------+
| User | Host | Password |
+------------------+-----------+----------------------+
| root | localhost | *0123456789ABCDEF... |
| root | 127.0.0.1 | *0123456789ABCDEF... |
| root | ::1 | *0123456789ABCDEF... |
| debian-sys-maint | localhost | *ABCDEF0123456789... |
+------------------+-----------+----------------------+
是的,这些密码未加盐。因此,攻击者可以预先构建表并将它们应用于所有 MySQL 安装。此外,攻击者还可以获知哪些用户的密码相同。
不得不说,mySQL 的人们没有遵循最佳实践。 John Steven 在 OWASP 的Password Storage Cheat Sheet 上写了一篇关于密码存储最佳实践的优秀论文。公平地说,MySQL 人员这样做可能是因为架构、设计或实现中的痛点(我根本不知道)。
如果您使用PASSWORD 和UPDATE 命令并且更改不起作用,请参阅http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html。尽管该页面名为“重置权限”,但它实际上是关于如何更改密码。 (它令人困惑的 MySQL 密码更改程序是如此糟糕,以至于你不得不跳过这些箍,但它就是这样)。