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

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-07 16:40:03
Original
1006 Leute haben es durchsucht

今天折腾 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)
Nach dem Login kopieren

看字面意思是两边的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)
Nach dem Login kopieren

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

mysql> show variables like '%password%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| old_passwords | ON    | 
+---------------+-------+
1 row in set (0.00 sec)
Nach dem Login kopieren

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

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)
Nach dem Login kopieren

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

mysql> select password("baoniu");
+-------------------------------------------+
| password("baoniu")                        |
+-------------------------------------------+
| *64BB8A91878B304CAEBD3141D835ED18531FD69A |
+-------------------------------------------+
1 row in set (0.03 sec)
Nach dem Login kopieren

如果执行

SELECT * FROM mysql.user; 
Nach dem Login kopieren

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

现在,创建新用户:

 create user 'baoniu' IDENTIFIED BY 'mypassword';
Nach dem Login kopieren

通过

select * from mysql.user order by User; 
Nach dem Login kopieren

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

Grant all privileges on *.* to 'baoniu'@'%' identified by 'mypassword';
Nach dem Login kopieren

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

flush privileges; 
Nach dem Login kopieren

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

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


Nach dem Login kopieren
Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Aktuelle Ausgaben
So ändern Sie MySQL in MySQL
Aus 1970-01-01 08:00:00
0
0
0
MySQL-Startfehler unter Centos
Aus 1970-01-01 08:00:00
0
0
0
MySQL stoppt den Prozess
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage