从另一台服务器安全连接MySQL


Secure MySQL connection from another server

我有一个包含车辆列表的数据库,其中前三列用于使用AJAX填充链接选项值。这三个菜单可以在我的网站上选择特定的车辆。有人问我,是否可以在第三方网站上提供这种车辆查找,目的是使用三层菜单在第三方网站上返回一个小的、可爆炸的字符串作为$_POST数据。

请问实现这一目标的最佳方式是什么?我可以启用远程连接,但在我知道如何充分保护它之前,我会谨慎行事。

抱歉,如果这看起来很愚蠢!我还没有处理过除了localhost之外的任何连接。

提前感谢

Joe

我认为没有任何理由让第三方访问您的数据库。

既然看起来你想给他们提供相当少量的公共可访问数据,为什么不在你自己的网站上创建一个url,以XML或JSON格式返回数据,他们可以随心所欲地使用这些数据呢。

这解决了您的即时需求,如果您需要,您可以将其开发成更复杂的服务


这里有一些简单的PHP,您可以使用它以JSON格式返回数据。将SQL替换为适合数据库的内容。

$sth = mysql_query("select m.make, l.model, i.count from makes m, models l, inventory i where i.makeid = makeid and i.modelid = l.modelid");
$rows = array();
while($r = mysql_fetch_assoc($sth)) {
    $rows[] = $r;
}
print json_encode($rows);

重要提示:如果您想接受第三方的输入,此代码很简单,但不适合。如果你想让他们查询你有多少福特的库存,你需要一份准备好的声明,例如PDO:

$stmt = $pdo->prepare("select i.count from makes m, inventory i where i.makeid = makeid and make = :make");    
$stmt->execute(array(':make' => $make));

我个人会在数据库前建立一个API并公开该服务,因为我总是担心将数据库公开给外部方。

也就是说,如果数据不是个人可识别的或关键的。然后你当然可以让别人访问你的数据库。

最好的方法是为第三方创建一个新用户,并只给该用户所需的权限(即,只给他们需要访问的数据库和表,以及只给他们所需的操作(SELECT、UPDATE等))

另一件需要注意的事情是,这可能还需要对MySQL的my.ini配置文件进行一些更改,因为标准MySQL安装仅绑定在localhost上。

我认为你有几个选项:

  1. 使用OpenVPN或SSH隧道之类的东西在两台服务器之间建立一个隧道,以允许MySQL远程连接通过(永远不要在公共接口上听!)。尽管如此,我不会为第三方这样做。

  2. 为两台服务器之间的交互创建Web服务。如果您选择这样做,您应该使用已知的数据序列化方法,如XML或JSON,而不是"可解释字符串",因为这将允许更高的可移植性和更少的代码编写来解析结果。