我正在尝试将我的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'
});我该如何建立(更)安全的连接?
发布于 2019-06-04 22:09:35
如果它是一个托管的数据库服务器,并且您有受保护的端点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();发布于 2019-06-05 13:48:15
您可以使用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。有一些tutorials online展示了如何执行此操作,但您需要根用户访问权限才能执行此操作。
发布于 2019-06-04 09:22:50
这并不是真的不安全。您有几个选择。首先,私有网络上的服务器是否在防火墙后面?或者它们只能通过公共ip地址相互连接?如果前者是真的,那你就没问题。但是,我会在服务器上添加防火墙规则,以便它只允许来自另一台计算机的连接。如果它们是在公共IP地址上连接,则需要执行相同的操作,并为MySQL使用非标准端口。您还可以添加另一个NIC并将MySQL服务绑定到该NIC。这样,如果黑客发现您的服务器,它将显示为关闭了所有端口。
https://stackoverflow.com/questions/56378335
复制相似问题