无法加载身份验证插件"caching_sha2_password"

Ama*_*wal 368 mysql database mysql-workbench mysql-8.0

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

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

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

对此有何解决方案?

小智 239

注意:对于MAC OS

  1. 从系统首选项>初始化数据库>打开MySQL
  2. 输入新密码.
  3. 选择"使用旧密码"
  4. 再次启动服务器.
  5. 现在连接MySQL Workbench

图片描述

  • 我在系统偏好设置中没有MySQL (48认同)
  • 广告回归旧的和不太安全的身份验证是*不是一个很好的解决方案. (7认同)
  • 这项工作,谢谢。我认为它有效,因为 MySQL 工作台使用旧密码加密连接到数据库服务器。也可以在安装 MySQL 并选择 Legacy 加密时完成,而不是推荐的强密码加密。 (4认同)
  • 这对 OSX 有帮助 (3认同)
  • 某些版本的 mysql 有不同的设置面板,这不起作用 (2认同)
  • 这方面有什么进展吗?现在是否可以在 2020 年底使用 MariaDb 连接到 MySQL,而不使用旧安全性? (2认同)

小智 181

你可以改变这样的密码加密.

ALTER USER 'yourusername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'youpassword';
Run Code Online (Sandbox Code Playgroud)

  • 如果OP想要使用全新的酷身份验证方法怎么办? (24认同)
  • 我必须将 localhost 更改为“%”。这允许 root 远程连接。更改用户 'root'@'%' 通过 'mypasswrd' 识别 mysql_native_password; (5认同)
  • @BrianFitzGerald 它是“caching_sha2_password”,链接 [here](https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html) 或 [here](https://mysqlserverteam .com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/)。 (2认同)
  • 其他人提到将这个“default_authentication_plugin = mysql_native_password”添加到配置中,但这对我不起作用。使用 ALTER 语句有效。谢谢你!:) (2认同)

小智 85

对于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
Run Code Online (Sandbox Code Playgroud)

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

的[mysqld]

default_authentication_plugin = mysql_native_password

重新启动MySQL服务器并再次打开Workbench.

  • 更改 my.ini 对我不起作用 - 但命令提示符更改了。 (2认同)
  • `my.ini` 文件位置:/sf/answers/1421790051/ (2认同)

Ama*_*wal 76

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

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

要么

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

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

的[mysqld]

default_authentication_plugin = mysql_native_password

重新启动mysql服务器以获取有效的更改,并尝试通过MySQL与任何mysql客户端连接.

如果仍然无法连接并收到以下错误:

Unable to load plugin 'caching_sha2_password'
Run Code Online (Sandbox Code Playgroud)

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

谢谢

  • 绝对不是缺少插件的问题的解决方案. (5认同)

Mon*_*rlo 69

目前(2018/04/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,遗憾的是它仍然处于测试模式.但是一旦安装完毕,您可能会坚持使用新的SHA密码加密,无需更改任何内容. (4认同)
  • 情况仍然如此.GA版本的安装仍然导致无法使用建议的密码加密登录.没有警告GA版本仅适用于旧版身份验证. (2认同)
  • 这是正确的答案.我浪费了这么多时间:( (2认同)
  • 至少在MacOS中,GA版本目前是8.0.12(2018/08/13)并解决了这个问题!谢谢! (2认同)

axe*_*ira 57

我遇到了同样的问题,但Aman Aggarwal的答案对我来说并不适用于运行mysql 8.X的Docker容器.我把它塞进了容器里

docker exec -it CONTAINER_ID bash
Run Code Online (Sandbox Code Playgroud)

然后以root身份登录mysql

mysql --user=root --password
Run Code Online (Sandbox Code Playgroud)

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

ALTER USER 'username' IDENTIFIED WITH mysql_native_password BY 'password';
Run Code Online (Sandbox Code Playgroud)

你们都准备好了.

  • 更新了0行,但仍然有效。 (3认同)
  • 是的@ZachSmith,“这个”指的是接受的回答者。 (2认同)
  • 用`docker exec -it CONTAINER_ID mysql --user=root --password`代替两个依赖于`bash` shell(未来不确定)的命令怎么样? (2认同)

Imt*_*zeA 42

我使用" MySQL Web Installer " 在我的Windows 10 PC上安装MySQL,并且在尝试使用MySQL工作台进行连接时遇到了同样的问题.我通过从安装程序窗口重新配置服务器来修复此问题.

MySQL Web安装程序 - 主屏幕

单击"重新配置"选项,将允许重新配置服务器.单击"下一步",直到出现"身份验证方法".

MySQL安装程序 - 身份验证方法

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

保持原样,这就是我解决问题的方法.


Cai*_*lau 37

注意:对于 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
Run Code Online (Sandbox Code Playgroud)

我通过以下步骤解决了它:

  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. 完毕!

  • 您刚刚启用了旧密码身份验证。这不是一个很好的解决方案。 (5认同)
  • 适用于通过brew安装的macOS bigSur(11.4)和mysql(8.0.25) (3认同)
  • 我在 ubuntu 上遇到了这个问题,这个解决方案工作得很好。谢谢 (2认同)

井上智*_*上智文 33

像这样?

docker run -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql --default-authentication-plugin=mysql_native_password
mysql -uroot --protocol tcp
Run Code Online (Sandbox Code Playgroud)

尝试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 就像一个魅力 <3 谢谢 (3认同)

arc*_*don 30

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

如果您专门尝试在MySql 8+上使用Docker映像,然后使用SequelPro访问在该Docker 容器上运行的数据库,那么您会很不走运。

请参阅sequelpro问题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
Run Code Online (Sandbox Code Playgroud)

当然,可以在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
Run Code Online (Sandbox Code Playgroud)

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

docker exec -it mysql1 bash

mysql -u root -p

show databases;
Run Code Online (Sandbox Code Playgroud)


小智 19

如果您仍想使用新的身份验证方法,正确的解决方案是安装该mariadb-connector-c软件包。对于 Alpine,运行:

apk add mariadb-connector-c
Run Code Online (Sandbox Code Playgroud)

这会将缺少的caching_sha2_password.so库添加到/usr/lib/mariadb/plugin/caching_sha2_password.so.


小智 18

- 打开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';
Run Code Online (Sandbox Code Playgroud)

- 然后,您可以再次访问Workbench(您应该能够在创建新的localhost连接并使用新凭据开始使用该程序后执行此操作).

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

图片

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


ela*_*ver 18

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

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
Run Code Online (Sandbox Code Playgroud)


Dyl*_*rce 12

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

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

version: '2'
services: 
  db:
   image: mysql:5.7
Run Code Online (Sandbox Code Playgroud)

  • 更改版本不是正确的解决方案. (9认同)
  • 有正当理由使用版本8而不是版本5.我在此页面上,因为我想使用版本8而不是版本5 (3认同)
  • 使用mysql:5.7而不是mysql:latest为我解决了这个问题 (2认同)

小智 12

这是我在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"
Run Code Online (Sandbox Code Playgroud)

相关的线路有入口点.

构建完成后,您可以使用以下命令进行测试:

$ 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 |
+---+
Run Code Online (Sandbox Code Playgroud)


Pre*_*ham 10

对于Windows 10,

  1. 修改**C:\ ProgramData\MySQL\MySQL Server 8.0中的my.ini文件**

[mysqld] default_authentication_plugin = mysql_native_password

  1. 重启MySQL服务

  2. 在命令行中登录MySQL,在MySQL中执行以下命令

  3. 创建一个新用户

创建用户'用户'@'localhost'IDENTIFIED BY'密码';

  1. 授予所有特权

授予所有特权*.*给'用户'@'localhost';

  1. 打开MySQL工作台,使用新的用户凭据打开新连接

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


Pra*_*til 9

这是在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'admin'


Bru*_*ali 8

如果你像我一样在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!)
Run Code Online (Sandbox Code Playgroud)


ank*_*kit 6

打开我的sql命令promt:

步骤1

然后输入mysql密码

第2步

最终使用:

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

请参阅:https//stackoverflow.com/a/49228443/6097074

谢谢。


Sha*_*moo 6

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


Vik*_*kky 5

几乎像上面的答案,但可能是在简单的查询中,我在我的Spring启动应用程序中获得此错误以及MySQL升级后的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';
Run Code Online (Sandbox Code Playgroud)


alb*_*o56 5

对我来说,这开始发生,因为在一个项目中,我使用的是Docker图像mysql:latest(版本5,工作正常),在以后的版本中,最新版本切换到版本8,并停止工作.我将我的图像更改为mysql:5,我不再收到此错误.


Dar*_*ane 5

我找到

ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password';
Run Code Online (Sandbox Code Playgroud)

本身不能工作。我还需要设置

[mysqld]
    default_authentication_plugin=mysql_native_password
Run Code Online (Sandbox Code Playgroud)

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


hug*_*gie 5

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

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

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

  1. sudo apt-get update
  2. sudo apt-get install lsb-release -y
  3. 从MySQL 网站下载 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 客户端并使用新的身份验证方法进行连接。