4

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

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

哦,如果您想知道,应用程序已经是伪 3 层,因为网格连接到 TdxMemData,而从不直接连接到 TADOQueries。我自己处理所有插入/更新的方式与使用 TClientdatasets 时需要的方式相同。

4

2 回答 2

6

如果您认为您的数据库易受攻击,请三思而后行使用 D2010 Datasnap。它非常非常脆弱。不要被 HTTPS 所迷惑,仍然缺少很多部分来完全保护通道。例如,一旦您使用 Datasnap,SQL Server Windows 集成身份验证(基于 kerberos...)就消失了。

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

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

于 2011-10-16T15:18:55.593 回答
4

[2016 年更新:2016 年的 DataSnap 在安全性和功能方面现在比写这个问题时更可悲。我不建议在任何新设计中使用它,永远。]

DataSnap 是构建多层(三层或更多)应用程序问题的解决方案。从包含客户端中所有业务逻辑的胖客户端通过 Internet 直接连接到 SQL 存在许多众所周知的问题,包括业务逻辑更改然后需要您立即更新所有客户端的事实。数据快照(或其他)中间层逻辑内部的中间层改进(业务逻辑更改)不会分发给每个客户端。客户端更瘦,包含更少的业务逻辑。其次,您自己构建的设计良好的数据快照“API”只会让您面临自己创建的风险,而不是让您面临整套 MS SQL 漏洞。

坦率地说,从胖客户端丢失 Kerberos 身份验证并不是放弃中间层想法的理由。我完全不明白 ldsandon 的意思。他是否提倡连接到 Internet 或 LAN 客户端并包含所有业务逻辑的两层应用程序架构,因为它比多层应用程序“更安全”?

您的标题所暗示的隐含问题是无法回答且未定义的。“真实”是什么意思?许多行业在他们自己的公司 LAN 中部署了两层胖客户端。许多人发现在他们自己的 LAN 中使用中间层是有益的,并且许多人发现在 Internet 上运行的外部应用程序绝对不应该将 SQL 连接暴露给胖客户端,因此他们提供了某种“Web 方法” (SOAP、REST+JSON 等)架构。已经仔细指出,Data-Snap 不是一个纯粹的“RESTful”架构,但它确实使用 JSON,并且在许多方面在设计上都是 REST-ful,尽管不完全。

If you don't understand the problem that DataSnap was created to solve, it is easy to think DataSnap is worthless, or (alternatively, and equally wrong) some kind of silver bullet. It exists for a particular purpose, one that many people find useful for their development needs. If you intend to take on the work of making a middle tier, DataSnap makes it easier than to do it 100% as a "roll your own middle tier", but it is more work than not having a middle tier.

于 2011-10-16T17:32:39.120 回答