【问题标题】:MariaDB Connection Issue (Digital Ocean)MariaDB 连接问题(数字海洋)
【发布时间】:2021-01-12 05:27:47
【问题描述】:

我从最新的 MariaDB 版本 10.4.14 中获得了备受讨论的 ER_NOT_SUPPORTED_AUTH_MODE,该版本安装在在 Digital Ocean droplet 上运行的 Ubuntu 20.04 上。上下文:

  1. 我可以远程(从我的开发 PC 上的 MySQL Workbench)和本地(从 SSH 运行 Ubuntu MariaDB 客户端)连接到 MariaDB 的 Ubuntu 实例。
  2. 当我的应用首次尝试查询数据库时,我的 Vue 应用(带有 Express 后端)收到 ER_NOT_SUPPORTED_AUTH_MODE 错误。
  errno: 1251,
  sqlMessage:
   'Client does not support authentication protocol requested by server; consider upgrading MariaDB client',
  sqlState: '08004',
  fatal: true }
  1. 我的应用程序(相同的代码)在我的本地开发 PC 的 MariaDB 实例上运行没有问题,版本为:10.4.13。这几个月来一直很稳定。

我升级了 MariaDB 服务器和客户端。我在网上搜索了很多关于这个问题的活动,并尝试了最常见的修复方法,即更改 MariaDB 用户以使用 mysql_native_password 身份验证: ALTER USER 'admin'@'localhost' IDENTIFIED WITH mysql_native_password BY PASSWORD('password')

我尝试了其他一些看起来可能相关的远景。这些都没有任何区别。我已经完成了 FLUSH PRIVILEGES,重新启动了服务器,我能想到的一切。至少尝试了 2 或 3 次以确保我做对了。尽管我已经使用 MariaDB 多年(包括在 Linux 上),但我不是 MariaDB 方面的专家,无法了解其他技巧。

在我放弃 MariaDB 并转而使用 MySQL(我在 Ubuntu 上使用早期版本)之前,我还能尝试什么?我需要通过 Ubuntu 部署,而不是 Windows 或 Raspbian Linux!

【问题讨论】:

  • 最后我成功地在我的 Windows 开发 PC 上重现了这个错误。那是一种解脱。现在我需要弄清楚如何设置一个可以通过代码成功访问数据库的非root用户。

标签: mysql node.js vue.js mariadb


【解决方案1】:

不是答案,但评论可能太长(我没有提前计算字符数:-)

ER_NOT_SUPPORTED_AUTH_MODE是服务器错误,在以下情况下会发生:

  • 客户端发送 pre 4.1 认证,服务器不再支持 3.23 协议

  • 客户端在身份验证之间从旧的更改为新的加扰长度

  • 服务器不知道/不支持客户端身份验证。

要找到它的确切原因,有几种方法:

  1. 可能最简单的方法:使用wireshark 或tcpdump 捕获您的流量,通过wireshark 可视化并检查服务器和客户端的hello 数据包。很可能会有两个以上的 hello 数据包,因为将重新协商身份验证。

  2. 启动 MariaDB 服务器的调试会话(可能在 DO 上不可能?!)并在 sql/sql_acl.cc 中设置一些断点,该文件负责用户身份验证。

我不熟悉 vue 应用程序,但我知道它使用的是 node.js - 你是否使用 MariaDB Nodejs 配置它?

祝你好运!

【讨论】:

  • 谢谢乔治!是的,这一切都建立在 Nodejs 之上。我在安装 MariaDB 时对其进行了配置,我是按照以下方式进行的:digitalocean.com/community/tutorials/… 使用简单的 localhost 连接会发生这种情况似乎很奇怪,但是使用具有相同凭据的 SQL Workbench 从远程连接可以正常工作。然而它是!仍然没有解决方案,当我解决这个问题时会更新答案。
猜你喜欢
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 2018-04-12
  • 2015-05-03
相关资源
最近更新 更多