从另一台服务器保护MySQL连接

时间:2012-07-26 14:34:30

标签: php mysql ajax

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

最好的方法是什么?我可以启用远程连接,但在我知道如何充分保护它之前我很谨慎。

对不起,如果这看起来很蠢!我还没有使用过localhost以外的任何连接。

提前致谢,

3 个答案:

答案 0 :(得分:5)

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

由于您似乎想要为他们提供相当少量的公共可访问数据,为什么不在您自己的网站上简单地使用XML或JSON格式返回数据的URL,他们可以随心所欲地执行任何操作用。

这解决了您的直接要求,如果您需要,可以将其发展为更复杂的服务。


这是一些简单的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);

重要提示:此代码很简单,但如果您想接受第三方的输入,则不适用。如果你想允许它们,例如查询库存中有多少个Fords,您需要一个准备好的声明,例如PDO

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

答案 1 :(得分:3)

我个人会在数据库前放置一个API并公开该服务,因为我总是小心翼翼地将数据库暴露给外部各方。

话虽如此,如果数据不是个人身份识别或关键。然后你当然可以让某人访问你的数据库。

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

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

答案 2 :(得分:2)

我看到它的方式是你有几个选择:

  1. 使用OpenVPN或SSH隧道之类在两台服务器之间建立隧道,以允许MySQL远程连接通过(永远不会在公共接口上听到!)。虽然,我不会为第三方这样做。

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