【问题标题】:Authentication plugin 'caching_sha2_password' cannot be loaded无法加载身份验证插件“caching_sha2_password”
【发布时间】:2020-12-07 00:15:26
【问题描述】:

我正在将 MySQL - 8.0 与 MySQL Workbench 连接并收到以下错误:

无法加载身份验证插件“caching_sha2_password”: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so,2):图像 没找到

我也尝试过使用其他客户端工具。

有什么解决办法吗?

【问题讨论】:

  • 如果您将 MySQL 8.0 配置为在 mysql_native_password 模式下运行,您或许能够解决此问题。
  • 正确,MySQL Workbench 需要更新连接器才能使用缓存的 sha2 密码(即将推出)。
  • 我将默认登录设置为本地并重新启动,问题仍然存在,我无法登录创建新用户。令人惊讶的是,在 2018 年安装 Mysql 和工作台并没有用完。质量控制低劣。
  • 我不知道你从哪里得到的印象,不再有 32 位 mysql 客户端库,但事实并非如此。事实是 MySQL Workbench 不再附带 32 位版本。
  • 那些建议使用较弱加密的答案不是正确的方法。使用其他客户端,例如 tableplus。

标签: mysql database mysql-workbench mysql-8.0


【解决方案1】:

您可以通过使用以下 Alter 命令更改用户来更改用户密码的加密:

ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY '密码';

或

我们可以通过使用旧密码插件来避免这个错误:

首先更改my.cnf 文件 for Linux / my.ini 文件在Windows中的认证插件:

[mysqld]

default_authentication_plugin=mysql_native_password

重新启动 mysql 服务器以使更改生效并尝试通过 MySQL 与任何 mysql 客户端连接。

如果仍然无法连接并出现以下错误:

Unable to load plugin 'caching_sha2_password'

这意味着您的用户需要上述插件。因此,请尝试在更改默认插件后使用 create user 或 grant 命令创建新用户。那么新用户需要本地插件,你就可以连接 MySQL。

谢谢

【讨论】:

  • 肯定不能解决缺少插件的问题。
  • 是的。问题是数据库管理软件还没有处理它。因此,除非您是 mysql 工作台开发人员,否则这是您现在的解决方法。
  • 添加配置标志后创建新用户的部分至关重要。
【解决方案2】:

您可以像这样更改密码的加密方式。

ALTER USER 'yourusername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'youpassword';

【讨论】:

  • 如果OP要使用全新的酷炫认证方式怎么办?
  • @BrianFitzGerald 它是“caching_sha2_password”,链接here 或here。
  • 成功了。谢啦。 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
  • 有人提到要将此default_authentication_plugin=mysql_native_password 添加到配置中,但这对我不起作用。使用 ALTER 语句有效。谢谢! :)
  • 我不得不将 localhost 更改为“%”。这允许根远程连接。 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'mypasswrd';
【解决方案3】:

喜欢这样吗?

docker run -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql --default-authentication-plugin=mysql_native_password
mysql -uroot --protocol tcp

Try in PWD

https://github.com/GitHub30/docs/blob/change-default_authentication_plugin/mysql/stack.yml

或者你应该使用 MySQL Workbench 8.0.11。

【讨论】:

  • 添加 --default-authentication-plugin=mysql_native_password 就像一个魅力
【解决方案4】:

注意:对于 MAC 操作系统

  1. 从系统偏好设置打开 MySQL > 初始化数据库 >
  2. 输入您的新密码。
  3. 选择“使用旧密码”
  4. 再次启动服务器。
  5. 现在连接 MySQL 工作台

【讨论】:

  • 这对 OSX 有帮助
  • 这项工作,谢谢。我认为它有效,因为 MySQL 工作台使用旧密码加密连接到数据库服务器。也可以在安装 MySQL 并选择 Legacy 加密而不是推荐的强密码加密时完成。
  • 部分版本的mysql设置面板不同,无法使用
  • 广告返回旧的和不太安全的身份验证根本不是一个好的解决方案。
  • 我的系统偏好设置中没有 MySQL
【解决方案5】:

目前(2018 年 4 月 23 日),您需要下载开发版本。 GA 不起作用。

我无法连接到最新的 GA 版本 (6.3.10)。

它与mysql-workbench-community-8.0.11-rc-winx64.msi 一起工作(来自https://dev.mysql.com/downloads/workbench/,标签开发版本)。

【讨论】:

  • 这实际上是正确的答案:MySQL 8.0 需要 MySQL Workbench 8.0,不幸的是它看起来仍处于 beta 模式。但是一旦安装,您可能会坚持使用新的 SHA 密码加密,无需更改任何内容。
  • 不是测试版,而是发布候选版 (RC)。 GA(一般可用)版本即将推出。
  • 对我来说最好的主意。
  • 还是这样。安装 GA 版本仍会导致无法使用推荐的密码加密登录。没有警告说 GA 版本仅适用于旧式身份验证。
  • 至少在MacOS,GA版本目前是8.0.12(2018/08/13),解决了问题!谢谢!
【解决方案6】:

对于 Windows 10,

  1. 修改my.iniC:\ProgramData\MySQL\MySQL Server 8.0\中的文件

    [mysqld]
    default_authentication_plugin=mysql_native_password
    
  2. 重启 MySQL 服务。

  3. 通过命令行登录MySQL,在MySQL中执行以下命令:

    • 创建一个新用户。

      CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
      
    • 授予所有权限。

      GRANT ALL PRIVILEGES ON * .* TO 'user'@'localhost';
      
  4. 打开 MySQL 工作台,并使用新的用户凭据打开一个新连接。

我遇到了同样的问题,这很有效。

【讨论】:

    【解决方案7】:

    如果您像我一样在 GitLab CI 上遇到此错误: 只需从最新版本更改为 5.7 版本即可;)

    # .gitlab-ci.yml
    
    rspec:
      services:
        # - mysql:latest (I'm using latest version and it causes error)
        - mysql:5.7 #(then I've changed to this specific version and fix!)
    

    【讨论】:

      【解决方案8】:
      • 打开 MySQL 命令行客户端

      • 使用新通行证创建新用户

      考虑到顶部 bin 文件夹的路径示例,以下是您需要在命令提示符下逐行运行的代码:

      cd C:\Program Files\MySQL\MySQL Server 5.7\bin
      MySQL -u root -p    
      current password...***  
      CREATE USER 'nativeuser'@'localhost'  
      IDENTIFIED WITH mysql_native_password BY 'new_password';
      
      • 然后,您可以再次访问 Workbench(在创建新的 localhost 连接并使用新凭据开始使用该程序后,您应该能够这样做)。

      用上面提到的用户名(本地用户)建立一个新的本地主机连接,使用密码(new_password)登录

      礼貌:Career365 团队回答了 UDEMY 常见问题解答

      【讨论】:

      • 这行得通。为什么?尝试使用root 连接时出现此错误,并且没有密码,这在命令行中有效,但在Sequel Pro 中无效。
      • 像魅力一样工作,与线程启​​动问题完全相关,请注意:您必须拥有 Mac os Catalina、docker 19.03、mysql 最新图像,执行此命令 $docker run -p 3306:3306 -d - -name mysql -e MYSQL_ROOT_PASSWORD=密码 mysql/mysql-server 来自 dzone 网站。
      【解决方案9】:

      我遇到了同样的问题,但是 Aman Aggarwal 的回答对我来说不适用于运行 mysql 8.X 的 Docker 容器。 我登录了容器

      docker exec -it CONTAINER_ID bash
      

      然后以root身份登录mysql

      mysql --user=root --password
      

      输入root密码(默认为'root') 最后运行:

      ALTER USER 'username' IDENTIFIED WITH mysql_native_password BY 'password';
      

      一切就绪。

      【讨论】:

      • 这看起来可能是我正在寻找的一个很好的答案。但我不知道“这个”是什么。你的意思是接受的答案?或另一个...
      • 是的@ZachSmith,“this”指的是接受的回答者。
      • 用docker exec -it CONTAINER_ID mysql --user=root --password 代替两个依赖于bash shell 存在的命令怎么样(未来还不确定)?
      • 这不适用于使用 docker desktop 2.0.3.0 (mac) 的 sequelpro 1.1.2。这些命令都可以工作,但登录时会出现 pro 错误 - 使用 mysql:latest (v8.0.15)
      • 正如其他人所报告的,使用 mysql 5.7 无需任何要求:docker run -p 3306:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=secret -d mysql:5.7
      【解决方案10】:

      对于 Windows 10:

      打开命令提示符:

      cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
      
      C:\Program Files\MySQL\MySQL Server 8.0\bin> mysql -u root -p
      Enter password: *********
      
      mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newrootpassword';
      Query OK, 0 rows affected (0.10 sec)
      
      mysql> exit
      

      或者,您可以将 my.ini 配置更改如下:

      [mysqld]
      
      default_authentication_plugin=mysql_native_password
      

      重启 MySQL 服务器并再次打开 Workbench。

      【讨论】:

      • 更改 my.ini 对我不起作用 - 但命令提示符更改确实如此。
      • my.ini 文件位置:stackoverflow.com/a/20311286/923560
      • 我只想注意,配置必须在你要连接的服务器中完成,并且ALTER USER为我从Windows连接到远程mysql服务器
      • 不限于 Windows 10
      【解决方案11】:

      对于那些使用 Docker 或 Docker Compose 的人,我遇到了这个错误,因为我没有设置我的 MySQL 映像版本。 Docker 会自动尝试获取最新版本 8。

      我将 MySQL 设置为 5.7 并重建了映像,它正常工作:

      version: '2'
      services: 
        db:
         image: mysql:5.7
      

      【讨论】:

      • 有正当理由使用版本 8 而不是版本 5。我在此页面上是因为我想使用版本 8 而不是版本 5
      • 使用 mysql:5.7 而不是 mysql:latest 为我解决了这个问题
      【解决方案12】:

      适用于 macOS 的 MySQLWorkbench 8.0.11 解决了这个问题。 我可以与在 docker 中运行的受 root 密码保护的 mysql 实例建立连接。

      【讨论】:

      • 这是为我解决的问题。我正在运行带有 8.0 服务器的旧 MySQL Workbench 6.3。虽然这里的许多答案都说要降级服务器兼容性,但我只是将我的 Workbench 版本升级到最新的 8.0 版本(当前为 8.0.15)。
      【解决方案13】:

      这是我在 docker-compose 中的数据库定义:

      dataBase:
          image: mysql:8.0
          volumes:
              - db_data:/var/lib/mysql
          networks:
              z-net:
                  ipv4_address: 172.26.0.2
          restart: always
          entrypoint: ['docker-entrypoint.sh', '--default-authentication-plugin=mysql_native_password']
          environment:
              MYSQL_ROOT_PASSWORD: supersecret
              MYSQL_DATABASE: zdb
              MYSQL_USER: zuser
              MYSQL_PASSWORD: zpass
          ports:
              - "3333:3306"
      

      那里的相关行是entrypoint。

      构建和构建后,您可以使用以下方法对其进行测试:

      $ mysql -u zuser -pzpass --host=172.26.0.2  zdb -e "select 1;"
      Warning: Using a password on the command line interface can be insecure.
      +---+
      | 1 |
      +---+
      | 1 |
      +---+
      

      【讨论】:

        【解决方案14】:

        几乎像上面的答案,但可能是简单的查询,在 MySQL 升级后,我在 spring boot 应用程序和 hibernate 中遇到了这个错误。我们通过对我们的数据库运行以下查询来创建一个新用户。我相信这是使用 sha256_password 而不是最新且良好的身份验证caching_sha2_password 的临时工作。

        CREATE USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pa$$word';
        
        GRANT ALL PRIVILEGES ON * .* TO 'username'@'localhost';
        

        【讨论】:

          【解决方案15】:

          这是在 Windows 10 上安装 MySQL 8.0 后对我有用的解决方案。

          假设 MySQL 用户名是root,密码是admin

          打开命令提示符并输入以下命令:

          cd C:\Program Files\MySQL\MySQL Server 8.0\bin

          mysql_upgrade -uroot -padmin

          mysql -uroot -padmin

          ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '管理员'

          【讨论】:

            【解决方案16】:

            我正在使用“MySQL Web Installer”在我的 Windows 10 PC 上安装 MySQL,并且在尝试使用 MySQL 工作台进行连接时遇到了同样的问题。我通过从安装程序窗口重新配置服务器解决了这个问题。

            单击“重新配置”选项将允许重新配置服务器。单击“下一步”,直到到达“身份验证方法”。

            在此选项卡上后,使用第二个选项“使用传统身份验证方法(保留 MySQL 5.x 兼容性)”。

            保持其他一切不变,这就是我解决问题的方法。

            【讨论】:

            • 我手动解压mysql-8.0.11-winx64.zip,无法轻松解决“无法加载caching_sha2_password”的问题。但是使用 mysql-installer-community-8.0.11.0.msi 并且我遵循上述建议,MySQL Workbench 8.0.11 可以登录 MySQL 服务器 8.0.11。
            【解决方案17】:

            打开我的 sql 命令提示符:

            然后输入mysql密码

            最终使用:

            ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password';

            参考:https://stackoverflow.com/a/49228443/6097074

            谢谢。

            【讨论】:

              【解决方案18】:

              在 Mac 上下载 8.0.11-rc 的开发版本对我有用。使用以下 docker 命令:

              docker run --name mysql -p 3406:3306 -e MYSQL_ROOT_PASSWORD=mypassword -d mysql
              

              【讨论】:

                【解决方案19】:

                对我来说,这开始发生是因为在一个项目中,我使用的是 Docker 映像 mysql:latest(这是第 5 版,工作正常),并且在以后的构建期间,最新版本切换到了第 8 版,@ 987654321@。我是changed my image to mysql:5,我是no longer getting this error。

                【讨论】:

                • 正确!谢谢。
                【解决方案20】:

                以下解决方案对我有用

                转到Mysql Workbench -> 服务器-> 用户和权限 1.点击添加账号

                2.在登录选项卡下提供新的详细信息,并确保将身份验证类型选择为标准,并选择相应的管理角色和架构权限

                【讨论】:

                  【解决方案21】:

                  我通过安装 MySQL 5.7 解决了这个问题:

                  第 1 步 - 启用 MySQL 存储库

                  首先,您需要在您的系统上启用 MySQL 5.7 社区发行版 yum 存储库。 yum 存储库配置的 rpm 包可在 MySQL 官方网站上获得。根据您的操作系统版本使用以下命令。

                  在 CentOS 和 RHEL 7 上

                  yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
                  

                  在 CentOS 和 RHEL 6 上

                  yum localinstall https://dev.mysql.com/get/mysql57-community-release-el6-9.noarch.rpm
                  

                  在 Fedora 27 上

                  dnf install https://dev.mysql.com/get/mysql57-community-release-fc27-9.noarch.rpm
                  

                  在 Fedora 26 上

                  dnf install https://dev.mysql.com/get/mysql57-community-release-fc26-9.noarch.rpm
                  

                  在 Fedora 25 上

                  dnf install https://dev.mysql.com/get/mysql57-community-release-fc25-9.noarch.rpm
                  

                  第 2 步 - 安装 MySQL 5.7 服务器

                  因为您已在系统上成功启用 MySQL yum 存储库。现在,根据您的操作系统版本使用以下命令安装 MySQL 5.7 社区服务器。

                  在 CentOS 和 RHEL 7/6 上

                  yum install mysql-community-server
                  

                  在 Fedora 27/26/25 上

                   dnf install mysql-community-server
                  

                  来源:https://tecadmin.net/install-mysql-5-7-centos-rhel/

                  【讨论】:

                    【解决方案22】:

                    回滚到以前的安装(到 MySQL Community Server 5.7 和 Workbench 6.1)并设置新的 MySQL 凭据对我有用!

                    【讨论】:

                      【解决方案23】:

                      好的,在这上面浪费了很多时间,所以这里是截至 2019 年 3 月 19 日的摘要

                      如果您专门尝试将 Docker 映像与 MySql 8+ 一起使用,然后使用 SequelPro 访问在该 docker 容器上运行的数据库,您运气不好。

                      见sequelpro issue 2699

                      我的设置是使用 docker desktop 2.0.3.0 (mac - mojave) 的 sequelpro 1.1.2,并尝试使用 mysql:latest (v8.0.15)。

                      正如其他人所报告的,使用 mysql 5.7 无需任何要求:

                      docker run -p 3306:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=secret -d mysql:5.7
                      

                      当然,可以在 docker 上使用 MySql 8+,在这种情况下(如果需要),此处为caching_sha2_password 类型问题提供的其他答案确实有效。但是 sequelpro 不能使用 MySql 8+

                      最后,我放弃了 sequelpro(2013-2014 年值得信赖的朋友),而是安装了DBeaver。一切都是开箱即用的。对于 docker,我使用了:

                      docker run -p 3306:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest --default-authentication-plugin=mysql_native_password
                      

                      您可以使用以下方法快速查看 mysql 数据库:

                      docker exec -it mysql1 bash
                      
                      mysql -u root -p
                      
                      show databases;
                      

                      【讨论】:

                      • 非常感谢分享这个。在不小心删除了我的 MySQL 开发容器后,我尝试了完全相同的组合。
                      • 很遗憾,Sequel Pro 不再积极开发了 :( 2016 年 4 月 3 日的最新消息,而现在已经是 2019 年了。这是我见过的 MySQL 资源管理器的最佳工具。
                      • @OleksiiShnyra 确实有几年没有生产版本了,但仅供参考,有更新的“夜间”版本可用。 sequelpro.com/test-builds 和通过brew cask install homebrew/cask-versions/sequel-pro-nightly。
                      • 对于那些能够通过命令行(mysql 客户端)和ALTER 他们的 myslq.user 表登录的用户,有一种解决方法可以让 SequelPro 正常工作,请注意:github.com/sequelpro/sequelpro/issues/…
                      • 如果你在 MySQL 8 上并且不想降级到mysql_native_password,你可以按照这个:stackoverflow.com/a/56402217/2321594
                      【解决方案24】:

                      当使用的工具与MySQL8不兼容时会出现此错误,请尝试更新到最新版本的MySQL Workbench for MySQL8

                      【讨论】:

                        【解决方案25】:

                        我发现了

                        ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password';
                        

                        无法自行工作。我还需要设置

                        [mysqld]
                            default_authentication_plugin=mysql_native_password
                        

                        在 /etc/mysql/mysql.conf.d/mysqld.cnf 在运行 PHP 7.0 的 Ubuntu 18.04 上

                        【讨论】:

                        • 这在 Centos 7 上对我有用。由于某种原因,我的密码默认保存为 caching_sha2_password ,尝试使用 phpMyAdmin 登录时出现错误 #1251。
                        【解决方案26】:

                        如果您尝试从另一台计算机(无论是否为 Docker)从基于文本的 MySQL 客户端连接到 MySQL 服务器

                        这里的大多数答案都涉及从桌面客户端连接,或者要求您切换到旧的身份验证方法。如果您将它与 MySQL 客户端(基于文本)连接,我让它与 Docker 容器中的 Debian Buster 一起工作。

                        假设您已经设置了 apt 系统和 wget,请执行以下操作:

                        1. sudo apt-get update
                        2. sudo apt-get install lsb-release -y
                        3. 从MySQL web site 下载一个 Debian 软件包,它会为您更新 apt 源。
                        4. sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb 并选择所需的选项。就我而言,我只需要启用MySQL Tools & Connectors。
                        5. sudo apt-get update
                        6. sudo apt-get install mysql-client -y
                        7. 完成。您现在可以运行新的 MySQL 客户端并使用新的身份验证方法进行连接。

                        【讨论】:

                        • 这是 WSL 问题的正确答案,谢谢!
                        【解决方案27】:

                        在下载和安装 MySql 时尝试使用旧密码,这对我有帮助。 或者按照 Santhosh Shivan 针对 Mac OS 发布的方法。

                        【讨论】:

                          【解决方案28】:

                          虽然这不应该是一个真实的 解决方案,如果您遇到困难,它确实可以在本地工作

                          ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
                          

                          【讨论】:

                            【解决方案29】:

                            其实MySql在安装的时候允许两种认证方式。

                            1. 密码加密
                            2. 传统加密

                            Read Here

                            因此,通过检查旧式身份验证,问题得到解决。

                            【讨论】:

                              【解决方案30】:

                              注意:对于 Linux(Debian、Ubuntu、Mint)

                              我收到了这个错误:

                              MySQL Error Message: Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
                              

                              我通过以下步骤解决了这个问题:

                              1. 在mysql控制台输入:$ mysql -u root -p,如果没有root用户密码,则:

                              2. 使用mysql数据库:mysql> use mysql;

                              3. 更改您的用户以解决问题:mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

                              4. 退出...mysql> quit;

                              5. 完成!

                              【讨论】:

                              • 在 MacOS 上无法使用,密码更新,我可以 sh 到容器并使用 mysql,但无法从外部连接到数据库。
                              • 您刚刚启用了旧版密码验证。不是一个很好的解决方案。
                              • 我在 ubuntu 上遇到了问题,这个解决方案非常有效。谢谢
                              • 适用于通过 brew 安装的 macOS bigSur (11.4) 和 mysql(8.0.25)
                              猜你喜欢
                              • 2018-10-16
                              • 2019-12-25
                              • 2018-11-07
                              • 1970-01-01
                              相关资源
                              最近更新 更多