【问题标题】:How do I implement Internet accessible system with Delphi?如何使用 Delphi 实现 Internet 访问系统?
【发布时间】:2010-10-29 07:55:01
【问题描述】:

我即将开始开发一个新系统,该系统需要支持多个用户并可能允许通过 Internet 访问数据库。

系统将是win32,不是基于网络的,数据库将只是在办公室中,并且可以在任何地方访问。我不确定这是否是一种危险的安全方法,欢迎提出建议

数据库将是SQL Server,系统将在Delphi 6中实现

有谁知道我是怎么开始的?我还需要考虑记录锁定。

如果有人能提供优秀文章的链接,将不胜感激。

干杯

保罗

【问题讨论】:

  • "Accessed over the Internet" 如中,你用Delphi写的客户端会访问远程数据库上的记录吗?或者如通过浏览器访问?
  • 一个普通的win32数据库,唯一的区别是数据库在伦敦的办公室,用户可能在苏格兰

标签: sql-server delphi delphi-6


【解决方案1】:

恕我直言,最简单的方法是创建一个 VPN,通过 Internet 安全地公开您的数据库。

安全性非常好,因为只有通过受信任的 VPN 连接才能访问数据库。

您的数据库将在任何地方都可用,只需将 Internet 用作安全传输数据库数据包的隧道。

因此,您的 Delphi 代码将像往常一样使用 TCP/IP 连接,通过 VPN 安全隧道连接到数据库。

无需添加额外的 Delphi 专用工件,如 Indy 组件等。 并且您将能够连接到非 Delphi 客户端的数据库,这可能是使用一些数据库浏览工具的好主意。

【讨论】:

    【解决方案2】:

    在 Internet 上公开数据库安全风险。安全漏洞很容易被远程利用。

    解决方案是:

    1. VPN,如其他答案所述。简单且安全,但需要在两个端点(客户端和 VPN 服务器)上进行一些设置,并且如果您不使用标准 VPN,则可能需要在服务器 - 或 VPN 路由器/设备 - 以及客户端上安装适当的软件协议)。
    2. 一个 n 层应用程序,其中只有应用程序服务器暴露于 Internet。您仍然需要妥善保护应用服务器和传输通道。可能需要较少的客户端设置。 Delphi 6 提供 Datasnap 作为 n 层库(它也仍然支持 CORBA,但自 D7 以来已被删除)。 DCOM 对防火墙不是很友好(但可以配置为跨它们工作)但可以自己保护通道,其他两个选项(套接字和 HTTP)更容易设置但安全性稍差(它们使用 DCOM 代理工作,因此客户身份丢失,需要自定义代码或证书来保护通道)。
    3. 第三种解决方案可能是让用户通过远程桌面进行远程连接,但它需要许可证和能够承受远程会话负载的机器。

    记录锁定由数据库本身处理 - 请仔细阅读有关 SQL Server 锁定模式的文档,以避免以后出现意外情况。如果连接速度不够快,您可以选择在客户端缓存一些数据(TClientDataset 可以很好地解决这个问题),它还可以减少锁定问题,但会引入更新冲突。

    【讨论】:

    • 我认为我会研究选项 1
    • 要设置 VPN,您需要一个“VPN 服务器”。它可以是安装了正确软件的 PC(Windows Server 随附,有几个可用于 Linux),或者可以这样工作的路由器/设备。不要将 VPN 服务器安装在数据库所在的同一台机器上,否则您将获得的安全性几乎没有。用户机器需要使用 VPN 客户端进行配置,或者在其远程位置使用 VPN 网关。有一些可用的协议,像 L2TP 这样较新的协议通常更好,并且要小心选择正确的身份验证方法,正确配置时 VPN 是安全的
    【解决方案3】:

    您可能是指通过 TCP/IP 进行通信的客户端服务器系统。

    您可以使用 Indy 组件创建它。请务必检查示例,因为它们不易使用,但您几乎可以创建与它们相关的任何网络。

    【讨论】:

    • 不需要在这样的架构中添加这样的 Delphi-only 层。 VPN 就可以了。
    • 实际上,我在家里有一个直接连接的 SQL Server 数据库和一个正在工作的客户端应用程序,它只使用 ADO 直接连接到这个数据库,而不需要任何 TCP/IP 组件。 ADO 内置了这种支持。那么印地?不要使用它,除非你也想从服务器检索其他东西......
    • 我想让事情尽可能简单。我仍然在实现客户端服务器类型或允许客户端直接写入数据库之间纠结
    • 任何数据库库都有“内置支持”来连接数据库,通常带有对 TCP/IP 的“内置”支持 :) ADO 本身使用底层数据库驱动程序支持的任何连接方式到数据库。
    【解决方案4】:

    实际上,可能有几十种技术,具体取决于您的经验、偏好和可用的工具。不过,我建议您使用 ADO 连接到数据库而不是 BDE。为此,您可以使用作为 Delphi 一部分的 ADO 组件或将 msado15.dll 类型库导入您的项目以使用原始 ADO API 调用。后者需要更多经验!
    SQL Server 能够将自己暴露在 Internet 上,尽管这会带来安全风险。尽管如此,想要访问它的人仍需要用户名和密码才能获得连接,并且您需要打开 SQL Server 使用的端口。但从技术上讲,要在 Internet 上使用 ADO,您只需要知道工作服务器的 IP 地址以及登录信息即可。不过,这是一个安全风险。出于这个原因,大多数开发人员不会将 SQL Server 公开给数据库,而只是编写 Web 服务来包装您想要公开的特定数据库功能。
    记录锁定是 SQL Server 将为您做的事情,如果您使用事务可以使其更加安全。

    最后,您需要学习和阅读的内容在很大程度上取决于您想要在应用程序中执行的操作。因此,在您开始编写一些代码之前,请开始编写功能设计以了解您想要什么以及为此需要什么。从这个文档开始,开始编写技术文档来更准确地描述你的代码需要做什么。一旦你有了这个,你可以就你需要的东西提出更直接的问题,但目前还不知道。

    【讨论】:

    • 谢谢,我可以使用 Delphi 6 以及我可以直接使用或通过类型库使用的所有 ADO 组件
    • 我会去找用户看看是否可以选择VPN
    • 将数据库直接放在 Internet 上存在非常高的安全风险。 SQL Slammer 蠕虫病毒展示了将 SQL Server 直接放到 Internet 上会发生什么。数据库通常具有已知的用户和密码,如果没有正确禁用或配置,则存在很大风险,或者也可能被利用的辅助服务(如 Slammer 所利用的)。事务与安全无关,它们都是关于数据一致性的。
    • 当对多条记录的更新失败时,事务将使您的代码更加安全。它将允许回滚完整的更新,而不是陷入部分更新的困境。
    • 是的,将 SQL Server 直接连接到 Internet 存在安全风险。从技术上讲,您连接到 Internet 的其他任何东西也是如此!在这种情况下,我们讨论的是 SQL Server,它通常没有任何默认用户帐户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    相关资源
    最近更新 更多