mysql客戶端登陸提示"client option 'secure_auth' enabled"錯誤


使用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)

參考資料:
6.1.2.4. Password Hashing in MySQL


免責聲明!

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



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