使用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)
联系客服