2017-04-17 74 views
1

我想通過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

是的,給我同樣的錯誤。 –

回答

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支持