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

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-07 16:40:03
Original
1005 people have browsed it

今天折腾 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)
Copy after login

看字面意思是两边的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)
Copy after login

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

mysql> show variables like '%password%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| old_passwords | ON    | 
+---------------+-------+
1 row in set (0.00 sec)
Copy after login

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

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)
Copy after login

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

mysql> select password("baoniu");
+-------------------------------------------+
| password("baoniu")                        |
+-------------------------------------------+
| *64BB8A91878B304CAEBD3141D835ED18531FD69A |
+-------------------------------------------+
1 row in set (0.03 sec)
Copy after login

如果执行

SELECT * FROM mysql.user; 
Copy after login

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

现在,创建新用户:

 create user 'baoniu' IDENTIFIED BY 'mypassword';
Copy after login

通过

select * from mysql.user order by User; 
Copy after login

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

Grant all privileges on *.* to 'baoniu'@'%' identified by 'mypassword';
Copy after login

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

flush privileges; 
Copy after login

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

至此,新创建的用户 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>
    
    


Copy after login
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Issues
MySQL stops process
From 1970-01-01 08:00:00
0
0
0
Error when installing mysql on linux
From 1970-01-01 08:00:00
0
0
0
phpstudy cannot start mysql?
From 1970-01-01 08:00:00
0
0
0
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template