如何更新远程ms访问数据库


How to update a remote ms access database?

我需要创建一个webapp来显示并允许编辑一组数据。

此数据包含在Access数据库文件中,由另一个应用程序(桌面应用程序)使用。

我正在评估完成这项工作的最佳方式。

不幸的是,我迁移到另一个数据库解决方案(rdbms,如MySQL或Postgres)的目的被客户拒绝了。

这里的问题是如何在服务器和执行同样使用这些数据的应用程序的桌面之间保持数据完整性和同步。

我所需要做的就是读取数据,存储编辑后的数据或新数据,为授权用户提供一个界面来查看这些新插入的数据,从而对其进行验证,并将其导入原始访问数据库。

我发现了以下可能的解决方案(更新桌面mdb副本),但每种方案都有优缺点:

  • 远程访问windows机器
    • 使计算机暴露在未经授权的访问之下
  • 使用rsync保持文件同步(每天一次)
    • 如果使用桌面应用程序编辑了客户端上的mdb,则会丢失数据
    • 只有在验证了所有数据后才能更新
    • 不会有真正的同步数据(直到rsync运行)
  • 客户端-服务器应用程序
    • 可以使用安全层保护数据免受攻击者攻击
    • 需要第三个应用程序(在桌面上)
    • 同步化要求授权用户使用第三个应用程序导入数据(这将查询远程数据库并更新本地mdb)

你知道其他能帮我完成这件事的方法吗?我关注的是客户端-服务器模型,如果这会更昂贵的话,但这是我认为唯一可行的方法。

你看到有针对性的解决方案的其他优点/缺点了吗?

我没有选择PL来开发它,但我想使用PHP和/或Python。远程环境(用于服务器)可以是Windows或*nix(首选)。

谢谢。

第一个想法:

exposes the machine to unauthorized access

这不是一个真正有效的论点。你在网上发布的所有内容都会被曝光。它不像是不能通过SSL/TLS得到进一步的保护。例如,甚至RDP也可以通过SSH隧道进行保护。

在我看来,最简单、最优雅的方法是使用web服务(SOAP)。编写服务器代码,使用Python或Java之类的东西在Access数据库上插入/更新。从工作代码生成WSDL。从WSDL,您可以为PHP/Python生成一个客户端。现在,您所要做的就是编写使用PHP/Python客户端的web界面。

为了安全起见,使用SSL和基本身份验证就足够了(例如,在Python的情况下,SOAPpy支持)。您可以使用pyodbc连接到Access数据库。

好吧,您可以使用2db并通过它们之间的某种web服务同步更改。分离web服务器Db(您可以使用现代mysql或其他什么)和当前访问Db您应该使用http方法中的时间戳,构建一种Rest-Api,根据GET方法、根据DELETE方法等返回新的或更改的记录。然后,您可以在每一侧使用一个调度作业查询另一侧的新记录(使用json传输),从而使记录保持相对不同步。

您可以通过仅在特定端口中公开应用程序数据库并仅向来自webapp服务器ip地址的http查询来确保安全。还使用http验证、散列等。。如果这不是一个重负载、高并发的应用程序(我想它不是,因为你使用访问作为Db),这应该可以工作。

您可以使用任何python web框架(如turbogears2.1、django)或bottle或flask 等迷你框架来构建这种迷你api

p.s如果你喜欢python(为什么不直接使用pyodbc),那么使用python漂亮的orm-sqlalchemy要好得多

我认为这实际上取决于身份验证问题和需要查看数据的用户数量。

我问的原因是什么?

您可以考虑使用Access 2010和office 365。这允许您将表链接到云,但实际上这些表也缓存在Access桌面的本地。这意味着使用了数据的实时复制同步,这对于Access 2010是自动的(因此您不必编写任何代码)。

这意味着在运行Access桌面应用程序时,您可以拔下网络插头,它将继续运行。一旦你有了wifi或连接,本地的更改就会同步到office 365。更好的是,您现在可以在Access中构建web表单。

被触摸或编辑的数据(或两侧的新记录)将通过管道流到您的本地计算机。因此,您在Access客户端中添加reods,web用户也会看到这些新的reods。

所以Access 2010现在有了网络发布,这适用于新的office 365。起价为每月6美元。如果只是少数用户,那么让他们都使用同一个帐户登录!这意味着你可以在比发布这篇文章所需的时间更短的时间内完成这一切,并且每月不到10美元!

对于那些不知道的人,Access 2010有网络发布。当您发布Access表单时,会将其转换为.net表单(zammel/XAML),并将代码转换为JavaScript。所以表单代码实际上运行在浏览器端。

由于该系统运行在office 365上,那么你可以使用一些重型熨斗,理论上你可以扩展到数百万用户。当您将Access应用程序发布到office 365时,在服务器端,您不再使用mdb或Access文件,而是使用所谓的Access Web服务。事实上,这些表已成为SharePoint列表的等价物。SP 2010的新功能是,这些列表现在具有级联删除等关系功能。

这个系统的真正美妙之处在于,您可以在Access中编写、创建和做任何事情,而无需学习或接触任何类型的服务器端技术。这是我的短视频,中途我只使用一个网络浏览器运行Access应用程序。

http://www.youtube.com/watch?v=AU4mH0jPntI

不需要activeX,甚至不需要Silverlight。事实上,我的Access应用程序在使用safari网络浏览器的iPad上运行良好。

因此,您可以考虑继续使用Access,并使用新的Access 2010功能将您的应用程序发布到web上。