之前可能已经提到了这个问题。用户的一些密码以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 |
+—————-+—————–+——————–+
任何人都可以帮我找出一种自动进行此更改的方法。对我的所有用户手动执行此操作会很痛苦。谢谢!
答案 0 :(得分:1)
如果您要为所有拥有旧格式密码的用户设置一些预定义值的密码,而不为每一个用户发出SET PASSWORD
,则可以
SET SESSION old_passwords=FALSE;
UPDATE mysql.user
SET password = PASSWORD('<some predefined value>')
WHERE LENGTH(password) = 16;
FLUSH PRIVILEGES;
注意:在进行任何更新之前,请确保您拥有可靠的备份。以防万一。