将Mysql旧密码升级到新版本

时间:2013-12-10 03:02:19

标签: php mysql linux bash shell

之前可能已经提到了这个问题。用户的一些密码以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 |
+—————-+—————–+——————–+

任何人都可以帮我找出一种自动进行此更改的方法。对我的所有用户手动执行此操作会很痛苦。谢谢!

1 个答案:

答案 0 :(得分:1)

如果您要为所有拥有旧格式密码的用户设置一些预定义值的密码,而不为每一个用户发出SET PASSWORD,则可以

SET SESSION old_passwords=FALSE;
UPDATE mysql.user 
   SET password = PASSWORD('<some predefined value>')
 WHERE LENGTH(password) = 16;
FLUSH PRIVILEGES;

注意:在进行任何更新之前,请确保您拥有可靠的备份。以防万一。