如何安全地连接到另一台服务器上的MySQL数据库?

6

我想将我的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'
});

我应该如何建立一个(更)安全的连接?


1
你的问题太宽泛了,在这里无法回答。如果您想了解更多关于Javascript的内容,我建议参考Mozilla指南。如果您想了解更多关于node的内容,请参考其文档。如果您想了解更多关于mysql npm模块的内容,请参考其文档 - Max Vu
3个回答

7

如果它是托管的数据库服务器,并且您拥有安全的终端点URL(即 https://host),那么只需将其用作主机名 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();

它有SSL证书,但我并不拥有物理服务器,只有使用权。正如我在下面所说的那样,该服务器是一个公共可访问服务器(www.emirates-virtual.com)的同一台服务器。 - Shahmeer Naqvi
你可能需要编辑问题,以便包括它是否阻止解决方案起作用。 - slothiful

3

您可以使用以下方式之一使用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')
  }
});

您还需要在MySql服务器上启用SSL。有一些在线教程展示了如何操作,但您需要具备root权限才能进行此操作。


1

这并不是真正的不安全。您有几个选择。首先,这些服务器是在防火墙后面的私有网络中吗?还是它们只能通过公共IP地址相互连接?如果前者成立,那么您就没问题了。但我建议您在服务器上添加防火墙规则,以便它仅允许来自另一台机器的连接。 如果它们通过公共IP地址连接,则您需要执行相同的操作,并且还要为MySQL使用非标准端口。您也可以添加另一个NIC并将MySQL服务绑定到其中。这样,如果黑客发现您的服务器,它将显示所有端口都关闭了。


该服务器是一个公共可访问服务器(www.emirates-virtual.com)的同一台服务器。 - Shahmeer Naqvi
你正在使用Ubuntu吗?如果是的话,是哪个版本?此外,这些是专用服务器还是虚拟服务器?在共享环境中您将无法执行此操作。最后,您是否具有root访问权限? - itsben
1
我认为服务器正在运行Linux,但我会找到版本。我有root访问权限,但我不确定服务器是虚拟的还是专用的。我将联系主机以找出答案。 - Shahmeer Naqvi
好的,请告诉我。 - itsben
你好,我发现这个服务器是一台专用服务器。 - Shahmeer Naqvi
如果您拥有根访问权限,那么您肯定应该能够保护它。我需要访问服务器才能对其进行配置。 - itsben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接