2012-07-26 91 views
1

我有一个包含车辆列表的数据库,其中前三列用于使用AJAX填充链接选项值。这三个菜单可以在我的网站上选择特定的车辆。我被问及是否可以在第三方网站上提供该车辆查找功能,并打算使用三层菜单在第三方网站上返回一个小的,可分解的字符串作为$ _POST数据。从另一台服务器安全的MySQL连接

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

对不起,如果这看起来愚蠢!至今我还没有使用除localhost之外的任何连接。

由于提前,

回答

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)); 
+2

一个很好的建议,因为“API”不需要太复杂。 – 2012-07-26 14:52:59

+0

谢谢Colin,这个方法非常感兴趣。没有第三方访问将是我的首选! 你是否介意扩大这一点,或者如果你意识到这一点,或许可以指引我获得一个很好的资源? – JoeP 2012-07-26 15:03:10

+0

@ user1266648我已经添加了几个示例 – 2012-07-26 15:24:06

3

我个人提出了一个API中的数据库面前,揭露该服务,因为我总是小心翼翼揭露数据库外部各方。

这就是说,如果数据不是个人可识别或关键的。那么你肯定可以让别人访问你的数据库。

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

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

+0

嗨迈克,感谢您的回应。有问题的表没有严格的敏感数据,但是数据库的其他表中包含关键数据,通过启用远程连接访问受限的一个表,我是否会以其他方式将其他表置于危险之中? – JoeP 2012-07-26 14:43:16

+0

在这种情况下,我可能会将这些表拉出到他们自己的数据库中。但是,是的,您可以限制用户只能在数据库中的某些表上操作的能力。 – 2012-07-26 14:44:44

+0

通过打开这些远程连接,即使只有有限的资助,您也可能会打开其他数据被盗。如果你设置你的权限是错误的,他们可能会采取这些数据,或者如果有一个MySQL利用它可能有可能让他们解决这个问题。在数据库和第三方之间建立一个层是更可取的,因为即使您正确设置了数据库连接并允许他们仅使用一组存储过程来访问数据,您也面临更大的风险。 – hsanders 2012-07-26 14:47:46

2

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

  1. 请使用类似的OpenVPN或SSH隧道允许MySQL的远程连接要经过两个服务器之间的隧道(NEVER EVER LISTEN在公共接口!)。虽然,我不会为第三方做这件事。

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

相关问题