Как безопасно подключиться к базе данных MySQL на другом сервере? - PullRequest
6 голосов
/ 30 мая 2019

Я пытаюсь связать своего бота Discord с базой данных MySQL, которая находится на другом сервере. Тем не менее, этот пример явно небезопасен:

const mysql = require('mysql');
const connection = mysql.createConnection({
  host     : 'hostname',
  port     : 'portnum',
  user     : 'db_user',
  password : 'db_user_password',
  database : 'db_name',
  charset  : 'utf8mb4'
});

Как мне установить (более) безопасное соединение?

Ответы [ 3 ]

7 голосов
/ 04 июня 2019

Если это сервер баз данных, размещенный на хосте, и у вас есть защищенный URL-адрес конечной точки (то есть https: // хост), просто используйте его в качестве имени хоста host: 'hostname', и этого должно быть достаточно.

Если это частныйсервер, который у вас есть, и у вас есть сертификаты SSL, то вы можете использовать следующее:

const fs = require('fs');
const mysql = require('mysql');

var connection = mysql.createConnection({
    host: '127.0.0.1',
    port: '3306',
    user: 'root',
    password: 'passw0rd',
    database: 'test',
    ssl: {
        ca: fs.readFileSync(__dirname + '/certs/ca.pem'),
        key: fs.readFileSync(__dirname + '/certs/client-key.pem'),
        cert: fs.readFileSync(__dirname + '/certs/client-cert.pem')
    }
});

connection.connect();
3 голосов
/ 05 июня 2019

Вы можете подключиться, используя SSL, используя что-то вроде этого:

const fs = require('fs');
const mysql = require('mysql');
const connection = mysql.createConnection({
  host     : 'hostname',
  port     : 'portnum',
  user     : 'db_user',
  password : 'db_user_password',
  database : 'db_name',
  charset  : 'utf8mb4',
  ssl: {
      ca: fs.readFileSync(__dirname + '/certs/ca.pem'),
      key: fs.readFileSync(__dirname + '/certs/client-key.pem'),
      cert: fs.readFileSync(__dirname + '/certs/client-cert.pem')
  }
});

Вы также должны включить SSL на сервере MySql. В Интернете есть несколько учебных пособий , показывающих, как это сделать, но для этого вам понадобится root-доступ.

1 голос
/ 04 июня 2019

Это не совсем небезопасно. У вас есть несколько вариантов. Во-первых, находятся ли серверы в частной сети за брандмауэром? Или они могут только соединяться друг с другом через публичный IP-адрес? Если первое верно, у вас все хорошо. Однако я бы добавил правила брандмауэра на сервер, чтобы он разрешал подключения только с другой машины. Если они подключаются по общедоступным IP-адресам, вам нужно сделать то же самое, а также использовать нестандартный порт для MySQL. Вы также можете добавить другой сетевой адаптер и привязать к нему службу MySQL. Таким образом, если хакеры обнаружат ваш сервер, все порты будут закрыты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...