2013-12-10 37 views
1

這可能是以前問過的。用戶的一些密碼以16位格式存儲。 Mysql已升級到5.5,但表中的密碼仍保持16位格式。將Mysql舊密碼升級到新版本

辦法告訴你的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

我不明白什麼密碼長度和mysql版本必須相互處理 – 2013-12-10 03:05:41

+1

@Dagon前段時間(如年)MySQL的密碼散列系統已從產生16位十六進制散列的系統更改爲一個這產生了41位十六進制數的版本。我認爲這一切的痛苦早已消失。看起來不是。 – 2013-12-10 03:09:07

回答

1

如果你想用密碼設置爲一些預定義的價值有自己的舊格式的密碼的所有用戶,而不會發出SET PASSWORD爲他們每個人,你可以做

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

注:前做任何更新確保你有一個可靠的備份。以防萬一。

+0

@ andresg3有幫助嗎? – peterm