zoukankan      html  css  js  c++  java
  • 主从复制报错2061:Authentication plugin 'caching_sha2_password' reported error:Authentication require secure connection

    主从复制报错2061:Authentication plugin 'caching_sha2_password' reported error:Authentication require secure connection

    (转) https://www.modb.pro/db/29919

    主从复制报错2061:

    出现故障

    在MySQL8.0中,创建主从复制使用的用户:

    mysql> CREATE USER 'repl'@'%' identified by 'XXXXXX' 
    mysql> GRANT REPLICATION SLAVE ON *.* TO `repl`@`%` 
    

    在从库配置好change master 信息后,start slave,查看复制状态,如下所示:

    Last_IO_Errno:2061
    Last_IO_Error:error connecting to mater 'repl@118.31.127.96:3307' - retry-time:60 retries:1 massage:Authentication plugin 'caching_sha2_password' reported error:Authentication require secure connection. 
    

    caching_sha2_password

        在MySQL8.0之前,身份验证的插件是mysql_native_password,在MySQL 8.0中,caching_sha2_password 是默认的身份验证插件,安全性更高。
     
        在MySQL中,系统状态变量Rsa_public_key,此值是sha256_password身份验证插件用于基于RSA密钥对的密码交换的公用密钥 。对于使用该sha256_password 插件的客户端,连接到服务器时,密码永远不会以明文形式公开。密码传输的方式取决于是否使用安全连接或RSA加密:
    

    1.如果连接安全,则无需使用RSA密钥对。这适用于使用TLS加密的连接。密码以明文形式发送,但由于连接安全,因此无法监听。
    2.如果连接不安全,并且RSA密钥对可用,则该连接将保持未加密状态。这适用于未使用TLS加密的连接。RSA仅用于客户端和服务器之间的密码交换,以防止密码监听。服务器收到加密的密码后,便对其进行解密。加密中使用加扰来防止重复攻击。
    3.如果未使用安全连接且RSA加密不可用,则连接尝试将失败,因为无法发送密码而不将密码公开为明文。
    由该 —server-public-key-path选项命名的文件中的公共密钥值 应与由 caching_sha2_password_public_key_path系统变量命名的服务器端文件中的密钥值相同 。如果密钥文件包含有效的公共密钥值,但该值不正确,则会发生拒绝访问的错误。如果密钥文件不包含有效的公共密钥,则客户端程序无法使用它。

    故障原因

    通过上面对插件caching_sha2_password的介绍,这次故障的原因可以猜测为:在从库连接主库的时候使用的是不被 caching_sha2_password认可的RSA公钥,所以主库MySQL拒绝了数据库连接的请求,从而,从库报错’caching_sha2_password’ reported error:Authentication require secure connection。
    

    根据上一张密码传输方式的第3条,该插件发现连接未加密,因此需要使用RSA加密来传输密码。但是,服务器不会将公用密钥发送给客户端,并且客户端未提供公用密钥,因此它无法加密密码并且连接失败:ERROR 2061 (HY000): Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection.

    官网给出的解决方案如下:

    要从服务器请求RSA公钥,需要指定选项 --get-server-public-key 。
    截屏20200831 下午5.43.59.pngimg
    从服务器请求基于RSA密钥对的密码交换所需的公共密钥。此选项适用于使用caching_sha2_password身份验证插件进行身份验证的客户端 。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果未使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。

    或者,如果客户端的文件包含服务器所需的RSA公钥的本地副本,则可以使用—server-public-key-path选项指定文件 。
    截屏20200831 下午6.02.39.pngimg
    PEM格式的文 件的路径名,其中包含服务器用于基于RSA密钥对的密码交换所需的公用密钥的客户端副本。此选项适用于使用sha256_password或 caching_sha2_password身份验证插件进行身份验证的客户端 。

    解决方案一:

    使用复制用户请求服务器公钥:
    mysql -u repl -p123 -h 118.31.127.96 -P3307 --get-server-public-key
    在这种情况下,服务器将RSA公钥发送给客户端,后者使用它来加密密码并将结果返回给服务器。插件使用服务器端的RSA私钥解密密码,并根据密码是否正确来接受或拒绝连接。

    重新在从库配置change masrer to并且start slave,复制可以正常启动:

    #停止主从复制
    #清空之前的主从复制配置信息
    stop slave;
    reset slave;
    
    #从新配置主从复制
    change master to master_user='repl',master_password='123',master_host='118.31.127.96',master_port=3307,master_auto_position=1;
    start slave;
    

    截屏20200831 下午5.45.24.pngimg

    解决方案二:

    使用复制用户请求服务器公钥:
    mysql -u repl -p123 -h 118.31.127.96 -P3307 --server-public-key-path=/mysqldata/my3308/data/public_key1.pem

    重新在从库配置change masrer to并且start slave,复制可以正常启动:

    #停止主从复制
    #清空之前的主从复制配置信息
    stop slave;
    reset slave;
    
    #从新配置主从复制
    change master to master_user='repl',master_password='123',master_host='118.31.127.96',master_port=3307,master_auto_position=1;
    start slave;
    

    解决方案三:

    根据社区提供的方案,修改复制账户,避免使用插件caching_sha2_password
    MySQL MySQL8.0主从同步报错2061问题解决_Cindy的博客-CSDN博客
    方法如下:
    1.修改repl用户,使其使用别的秘密加密方式,不使用插件caching_sha2_password。
    2.

    CREATE USER 'repl'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'XXXX'; 
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; 
    
    #检查复制账户
    select user,host,plugin,authentication_string from user G
    *************************** 4. row ***************************
                     user: repl
                     host: %
                   plugin: mysql_native_password
    authentication_string: *B2A7A5489FB0EE54E43E3ADCDDVDG5CCF255AF0
    
    #重新配置主从配置
    

    总结

    出现ERROR 2061 (HY000): Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection.是因为复制账户repl没有加密连接到主库,所以主库拒绝了在传输过程中,明文显示密码的连接。

    解决方法有三种,如上。个人认为解决方法一和解决办法二 比 解决方法三 更有效,无需修改任何用户信息,仅需要通过 --get-server-public-key和–server-public-key-path请求公钥即可。
    解决方法三完全避免了使用MySQL8.0的密码插件caching_sha2_password。

  • 相关阅读:
    centos7刚安装解决网络问题
    python matplotlib的常用绘图方法
    python实现最小可编辑距离
    JDBC快速入门
    关于MYSQL常用操作查询语言
    3w字详解java集合
    ELK实时日志分析平台环境部署--完整记录(转)
    ELK简介(转)
    python格式化输出(% & format)
    ElasticSearch查询 搜索 | 更新 | 查询
  • 原文地址:https://www.cnblogs.com/zgrey/p/15398633.html
Copyright © 2011-2022 走看看