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



我正在尝试通过 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

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

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

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

编辑:语法

最新更新