2014-01-29 49 views
1

我有以下情形。我有两个Web应用程序在两台不同的服务器上运行。我想从server1的webapplication插入数据到server2的sqlite数据库。 enter image description here插入数据到远程的SQLite

由于SQLite不支持远程连接我寻找替代方法来插入数据,如调用Web服务等

建议是appriciated任何可能的替代方案。

谢谢。

PS:两个服务器具有的Yii + Apache的开发的应用程序(需要不知道这个信息)

回答

2

这包括两个步骤:

  1. 在SQLite的一面,创建一个微小的PHP API,接受SQL通过POST请求执行。不要忘记执行授权!
  2. 在主应用程序(MySQL的)侧,请确保你创建SQlite的兼容SQL,然后使用卷曲将其发布到SQLite的侧

至于授权:使用共享的秘密力量的简单解决方案是

    上的MySQL侧
  • 读取当前时间戳
    • 串连$时间戳。$ sharedsecret。$ SQL
    • 计算散列(SHA256想到)
    • 发送时间戳,SQL和哈希作为POST参数
  • 在SQLite的侧
    • 检查时间戳,失败如果它太旧或新(重播安全)
    • 计算哈希($时间戳。$ sharedsecret。$ SQL),并比较发送哈希值,如果错了
    • 运行SQL失败,并为后面的结果

这ofcourse假设,即SQlite的一侧完全信任MySQL的一面。

+0

谢谢。我的想法是使用卷曲。但我担心安全。让我试试这个。 – Dirgh

0

您可以从server1的处理更新/请求创建Server2上一个很小的API。 RESTful API会很好,为您的表创建合理的端点。试试看ToroDispatch。然后,您可以使用curl函数或使用一些HTTP客户端库(如Guzzle)与server2进行通信。

如果需要发送的更新频率很高,那么在后台执行消息传递可能是更好的方法。这将使您的应用程序更好地处理更多的连接,并且不会阻止您的请求处理网络请求。如果是这种情况,你可以通过cron作业(非实时)完成,或者更好的是,通过Gearman完成。

对于服务器到服务器的安全问题,则可以通过限制访问:使用某种形式的基本身份验证(请求签名)的

  1. ,或
  2. 经由私人暴露Server2的API到Server1网络或
  3. 将服务器2上的服务器1加入白名单(通过您的防火墙或网络服务器)。
+0

感谢您的回答。但是,在这个问题上,更新可能不是实时的,或者我需要设置一个cron作业,它会检查每秒不首选的.. – Dirgh