记MySQL的哈希加密问题导致的远程连接异常:”ERROR 2049 (HY000)

WBOY
发布: 2016-06-07 16:40:03
原创
962 人浏览过

今天折腾 mysql 的时候,遇到一个问题。我在mac book上下载最新的 mysql -5.6.15-osx10.7-x86_64,在连接一个远程的 mysql 服务器(5.0.77版)时报如下的异常: [baoniu@zkb-MacbookAir bin]$ mysql -h10.232.41.14 -uazkaban -pazkabanWarning: Using a pas

今天折腾mysql的时候,遇到一个问题。我在mac book上下载最新的mysql-5.6.15-osx10.7-x86_64,在连接一个远程的mysql服务器(5.0.77版)时报如下的异常:

[baoniu@zkb-MacbookAir bin]$ mysql -h10.232.41.14 -uazkaban -pazkaban
Warning: Using a password on the command line interface can be insecure.
ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)
登录后复制

看字面意思是两边的mysql版本不一致, 使用了mysql 4.1.1之前的授权协议连接时被拒绝。奇怪,本地的版本更新,远程的mysql是5.0.77版也大于4.1.1啊?后来查到在服务器上的密码加密是打开了old_passwords,用的旧的加密方式。

本质原因是:mysql变更过哈希加密的方法,早前是16位以下的,而在4.1以后是更长的hash。

可以测试下:

mysql> SELECT PASSWORD("baoniu");           
+--------------------+
| PASSWORD("baoniu") |
+--------------------+
| 36552eac6dd793f6   | 
+--------------------+
1 row in set (0.00 sec)
登录后复制

这是16位的hash,查看old_password选项的值:

mysql> show variables like '%password%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| old_passwords | ON    | 
+---------------+-------+
1 row in set (0.00 sec)
登录后复制

可以在当前会话里面设置密码格式:

mysql> set old_passwords=0;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like "%password%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| old_passwords | OFF   |
+---------------+-------+
1 row in set (0.01 sec)
登录后复制

现在试下新密码的hash长度:

mysql> select password("baoniu");
+-------------------------------------------+
| password("baoniu")                        |
+-------------------------------------------+
| *64BB8A91878B304CAEBD3141D835ED18531FD69A |
+-------------------------------------------+
1 row in set (0.03 sec)
登录后复制

如果执行

SELECT * FROM mysql.user; 
登录后复制

查看mysql.user表可以发现,长密码和短密码都有。

现在,创建新用户:

 create user 'baoniu' IDENTIFIED BY 'mypassword';
登录后复制

通过

select * from mysql.user order by User; 
登录后复制

可以看到新建用户baoniu的密码hash值是长的。
接着可以授权用户 baoniu 远程登录权限:

Grant all privileges on *.* to 'baoniu'@'%' identified by 'mypassword';
登录后复制

格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by “用户密码”; @ 后面是访问mysql的客户端ip地址(或是主机名) % 代表任意的客户端,如果填写 localhost 为本地访问(那此用户就不能远程访问该mysql数据库了)。

flush privileges; 
登录后复制

(让刚才的内容立即生效)

至此,新创建的用户 baoniu 就可以远程登录了,不会再报这个异常信息了。


如果想把老的账号都改用新的hash方式,可以执行:

SELECT Host, User, Password FROM mysql.user WHERE LENGTH(Password) 
<p>参考:<br>
1. MySQL_4.1之后的哈希加密问题<br>
     2. mysql-error-2049-hy000-connection-using-old-pre-4-1-1-authentication-protoc</p>
    <p class="copyright">
        原文地址:记MySQL的哈希加密问题导致的远程连接异常:”ERROR 2049 (HY000): Connec, 感谢原作者分享。
    </p>
    
    


登录后复制
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板