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

Connecting to MariaDB with nodejs over ssl with clear text password

我正在尝试通过 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 连接到数据库。

将其设置为调试模式后,我可以看到客户端正在尝试使用 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[=10=]';
      var buffer = Buffer.from(password);
      cb(null, buffer);
    }
  });

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

编辑:语法