这可能是以前有人问过的。用户的一些密码以16位格式存储。Mysql已经升级到5.5,但是表中的密码仍然是16位格式。
判断MySQL使用的密码方案的一种方法是运行下面的查询,它将列出每个用户的密码长度(16或41):
mysql> SELECT `User`, `Host`, Length(`Password`) FROM mysql.user;
+—————-+—————–+——————–+
| User | Host | Length(`Password`) |
+—————-+—————–+——————–+
| root | localhost | 16 |
| mary | 20.20.3.2 | 16 |
| fred | localhost | 16 |
| sally | 64.56.139.194 | 16 |
| fschmidt | 64.56.139.194 | 16 |
…要将用户更改为完全相同的密码,但以较新的更长格式存储,我们可以这样做:
mysql> SET SESSION old_passwords=FALSE;
mysql> SET PASSWORD FOR ‘visitlogger’@’64.55.129.%’=PASSWORD(‘ ‘);
mysql> flush privileges;现在我们可以验证这些更改:
mysql> SELECT `User`, `Host`, Length(`Password`) FROM mysql.user;
+—————-+—————–+——————–+
| User | Host | Length(`Password`) |
+—————-+—————–+——————–+
| root | localhost | 41 |
| mary | 20.20.3.2 | 41 |
| fred | localhost | 41 |
| sally | 64.56.139.194 | 41 |
| fschmidt | 64.56.139.194 | 41 |
+—————-+—————–+——————–+有人能帮我找出一种自动改变的方法吗?这将是一个痛苦的手动为我的所有用户。谢谢!
发布于 2013-12-10 03:22:00
如果要将密码设置为以旧格式设置密码的所有用户的预定义值,而不对每个用户发出SET PASSWORD,则可以这样做。
SET SESSION old_passwords=FALSE;
UPDATE mysql.user
SET password = PASSWORD('<some predefined value>')
WHERE LENGTH(password) = 16;
FLUSH PRIVILEGES;注意:在进行任何更新之前,请确保您有一个可靠的备份。以防万一。
https://stackoverflow.com/questions/20485237
复制相似问题