關於mysql密碼的一些札記——password和old_password


今天在搞一mysql服務器時,看到–old-passwords選項,心中迷惑。特檢索了一些資料。並log之,以備遺忘!

   –old-passwords選項的目的是當服務器生成長密碼哈希值時,允許你維持同4.1之前的客戶端的向后兼容性。該選項不影響鑒定(4.1和以后版本的客戶端仍然可以使用有長密碼哈希值的賬戶),但它防止在密碼更改操作中在user表中創建長密碼哈希值。在這種情況下,該賬戶不能再用於4.1之前的客戶端。沒有–old-passwords選項,可能會出現下面的不期望的情況:

·         舊客戶端連接有短密碼哈希值的賬戶。

·         客戶更改自己的密碼。沒有–old-passwords,可以為該賬戶生成長密碼哈希值。

·         下次舊客戶試圖連接賬戶時不能連接上,因為賬戶有長密碼哈希值,需要新的哈希機制進行鑒定。(一旦賬戶user表中為長密碼哈希值,只有4.1和以后版本的客戶端可以鑒定它,因為4.1之前的客戶端不理解長哈希)。

根據以上資料。我們可以來做一下測試。

mysql> show variables like ‘%password%’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| old_passwords | OFF   |  ####這里表明已經關閉了舊密碼選項
+—————+——-+
1 row in set (0.00 sec)

##測試一下密碼長度mysql> select password(’123456′),length(password(’123456′));
+——————————————-+—————————-+
| password(’123456′)                        | length(password(’123456′)) |
+——————————————-+—————————-+
| *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |                         41 |
+——————————————-+—————————-+
1 row in set (0.00 sec)

很明顯,這里是 41位的密碼。我們再打開舊密碼選項:

mysql> set old_passwords=on;  ##這里僅對當前會話測試,若要全局,請在配置中設置或者加入全局聲明
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like ‘%password%’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| old_passwords | ON    |
+—————+——-+
1 row in set (0.00 sec)

我們再次來測試pasword函數:
mysql> select password(’123456′),length(password(’123456′));
+——————–+—————————-+
| password(’123456′) | length(password(’123456′)) |
+——————–+—————————-+
| 565491d704013245   |                         16 |
+——————–+—————————-+
1 row in set (0.00 sec)
 

可見,此時的password的長度變成了16位了。

      綜上,在平時mysql管理中,如果不涉及到mysql.user表的話,一般不會出現密碼不匹配的情況。但是,若在升級或數據庫遷徙中,特別是對不同版本(4.1是分界點)全庫移植的

情況下,務必注意類似的細節問題。即:老版本如果打開了old_passwords選項的話,移植后的mysql也要打開old_password 或者對密碼rehash,生成新的hash密碼長度。並要確保user表password字段的長度(4.1以后版本已經是 41個字節了)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM