连接到MariaDB的有超过的NodeJS SSL与明文密码

问题描述:

我想通过SSL连接到MariaDB的情况下,连接到MariaDB的有超过的NodeJS SSL与明文密码

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

conn.connect(); 

CA是cerificates的数组。我收到以下错误。

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。

+0

你试过['mysql2'](https://github.com/sidorares/node-mysql2)吗? – robertklep

+0

是的,给我同样的错误。 –

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

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淋巴结mysql2(我希望能尽快解决这个问题),所以你需要在服务器上同时启用auth_plugin和auth_switch支持