mysql - 使用nodejs通过ssl使用明文密码连接到MariaDB

标签 mysql node.js node-mysql

我正在尝试通过 ssl 连接到 mariadb 实例,

var mysql = require('mysql');
var conn = mysql.createConnection({
    user: 'user',
    password: 'password',
    debug: true,
    port: '3306',
    host: "host",
    ssl: {
        "ca": ca
    }
});

conn.connect();

ca 是证书数组。我收到以下错误。

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MariaDB client

我能够使用 python 和 mysql.connector 连接到数据库。

将其设置为 Debug模式后,我可以看到客户端正在尝试使用 mysql_native_password 身份验证。我需要使用 mysql_clear_password。

最佳答案

如果您的服务器支持基于插件的身份验证和身份验证切换请求,您可以尝试以下代码:

var mysql = require('mysql2');
var conn = mysql.createConnection({
  user: 'user',
    password: 'password',
    debug: true,
    port: '3306',
    host: "host",
    ssl: {
        "ca": ca
    },
    authSwitchHandler: (data, cb) => {
      if (data.pluginName === 'mysql_clear_password') {
      // https://dev.mysql.com/doc/internals/en/clear-text-authentication.html
      var password = 'password\0';
      var buffer = Buffer.from(password);
      cb(null, buffer);
    }
  });

不幸的是,初始身份验证类型始终是 mysql_native 和 node-mysql2(我希望尽快修复此问题),因此您需要在服务器上启用 auth_plugin 和 auth_switch 支持

编辑:语法

关于mysql - 使用nodejs通过ssl使用明文密码连接到MariaDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43448563/

相关文章:

mysql - 如何调试mysql外键约束,ON DELETE CASCADE不会在生产环境中从子表中删除行

mysql - 如果选择输出行则返回 1

javascript - 使用加密js在 Node js中解密后显示视频文件

python - 在 Windows 上使用 IPython Notebook 时出现 500 服务器错误

debugging - Mongoose 调试日志到单独的文件

Node.js 找不到模块 'readable-stream'

mysql - Nodejs node-mysql 查询结果数据类型

php - 我可以让这三个 SQL 查询只适合一个吗?

mysql - 通过 API 创建数据未使用 beego 保存

javascript - 在哪里使用 AngularJS 和 node-mysql 连接到 MySQL 数据库?