使用Datasnap构建REAL数据库应用程序

我在D2010中使用ADO和devexpress构建了一个广泛的2层应用程序。 我想将其升级为使用Datasnap,主要是向易受攻击的SQL服务器提供HTTPS通信,而不仅仅是TCP / IP。 我遵循了我能找到的所有Datasnap教程。 我有Cary Jensen的深入Delphi:ClientDatasets。 一切都很好,但是这些例子非常没用,因为在REAL数据库应用程序中,网格是通过将多个表连接在一起而填充的,几乎从不从单个表填充。 这消除了客户端数据集的“自动解析”能力。 即使是建议beforeupdateevent处理程序也不能在datasnap应用程序中工作,因为数据库只能访问datasnap服务器。 所以在我看来,我必须在datasnap服务器上为每次插入/更新创建一个方法,然后将这些方法公开给客户端,并根据需要从客户端调用它们来请求datasnap服务器执行所需的更新/插入。 这看起来很多工作!

有没有更简单的方法来实现https通信到SQL Server?

哦,如果你想知道,该应用程序已经是伪三层的,因为网格连接到TdxMemData,并且不会直接连接到TADOQueries。 我自己处理所有插入/更新操作的方式与我使用TClient数据集时所需的方式相同。


如果您认为您的数据库易受攻击,请考虑使用D2010 Datasnap。 它非常非常脆弱。 不要被HTTPS所愚弄,还有很多东西不能完全保护频道。 例如,一旦使用Datasnap,SQL服务器Windows集成身份验证(基于kerberos的...)就消失了。

有关完整的解释,请参阅:为什么Datasnap 2010是一个玩具库。 这当然是我个人的看法,但是基于我从Delphi 3开始使用Midas / Datasnap的经验,以及我目前关于IT安全性的工作。

无论如何,你插入/更新/删除错了。 您必须使用提供者的事件来控制datasnao服务器端的事件。 这比在双层应用程序中处理它们要复杂一些,但是对于每个操作您不需要特别的方法。


[2016年更新:2016年的DataSnap在安全性和功能方面比撰写此问题时更加严重。 我根本不推荐将它用于任何新设计中。]

DataSnap是解决构建多层(三个或更多)应用程序的问题的解决方案。 在包含客户端所有业务逻辑的胖客户端上通过互联网直接连接到SQL有很多被很好理解的问题,其中包括业务逻辑改变的事实,因此需要您立即更新所有客户端。 数据快照(或其他)中间层逻辑中的中间层改进(业务逻辑更改)不会分发给每个客户端。 客户端更薄,并且包含更少的业务逻辑。 其次,您自己构建的设计良好的数据快照“API”只会让您面临自己创建的风险,而不是将您暴露给整个MS SQL漏洞集。

坦白地说,从胖客户端丢失Kerberos身份验证,不是放弃中间层的理由。 我在这里完全不理解爱德华的观点。 他是否主张连接到互联网或局域网客户端的两层应用程序体系结构,其中包含所有业务逻辑,比“多层”应用程序“更安全”?

您的标题暗示的隐含问题是无法回答的,并且是未定义的。 “真实”是什么意思? 许多行业在自己的企业局域网内部署了两层厚客户端。 许多人认为在他们自己的局域网内部使用中间层是有好处的,许多人发现通过互联网运行的外部应用程序肯定不会将SQL连接提供给胖客户端,因此他们提供某种“网络方法” (SOAP,REST + JSON等)架构。 已经仔细指出Data-Snap并不是一个纯粹的“RESTful”体系结构,但它确实使用了JSON,并且在设计上有很多方面的REST,尽管不完全。

如果您不了解DataSnap的创建问题,很容易想到DataSnap是毫无价值的,或者(或者也是同样错误的)某种银弹。 它存在一个特定的目的,许多人对其发展需求有用。 如果你打算承担中间层的工作,DataSnap使它比100%做“自己的中间层”更容易,但是它比没有中间层更有效。

链接地址: http://www.djcxy.com/p/64679.html

上一篇: Building a REAL database application using Datasnap

下一篇: How can I 'freeze' a dataset in a Datasnap server?