使用mysql workbench登陸mysql服務器時提示授權算法錯誤。
查閱資料發現,mysql密碼使用有兩個階段,第一階段是登陸時使用hash value進行驗證,第二階段用password()函數生成密碼。
換句話說,第一階段用加密字符串登陸,第二階段需要更改密碼(create user/grant/set password)時使用password()函數來生成。
而第一階段的驗證hash value有兩種,一種是pre-4.1版本,另一種是4.1版本的,前者是16字節的字符串,后者是41字節的字符串。
user表的password的長度也調整到了41字節。新版本的hash value總是以*開頭。
為了兼容,加入了old_password()函數和old_passwords變量,old_passwords為1時,old_password()函數和password()是一樣的,
old_passwords為0時,old_password()返回16字節的hash,password()返回41字節的hash。
為了使DBA可以控制采用哪種驗證方式,加入了secure_auth變量,mysql 5.6.5之前的版本默認為0,之后的默認為1。
同時加入了--secure-auth選項。
相關的命令:
mysql> SET @@session.old_passwords = 0; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@session.old_passwords, @@global.old_passwords; +-------------------------+------------------------+ | @@session.old_passwords | @@global.old_passwords | +-------------------------+------------------------+ | 0 | 1 | +-------------------------+------------------------+ 1 row in set (0.00 sec) mysql> CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'newpass'; Query OK, 0 rows affected (0.03 sec) mysql> SET PASSWORD FOR 'existinguser'@'localhost' = PASSWORD('existingpass'); Query OK, 0 rows affected (0.00 sec)