【发布时间】:2012-11-05 15:12:03
【问题描述】:
我正在设计网络的各个部分。我目前对未来软件项目设计的想法:
DMZ 中的网络服务器。这个网络服务器有一个穿过防火墙的洞(在 sql 端口上)与一个 MSSQL 数据库对话,该数据库是所有数据管理的内部。
问题:与其在防火墙中设置一个孔来与数据库服务器通信,不如让一个内部 Web 服务器托管 DMZ 中的应用程序可以使用的 Web 服务会更好/更安全,数据库逻辑在网络服务(一个只与该网络服务器对话的漏洞。)
Web 服务实现将只允许在一个地方更新任何 API 更改 - 这就是我考虑它的原因 - 尽管它可能会比直接数据库和查询访问要慢。
关于哪个更好的想法?
编辑:意识到除非我将所有应用程序/业务逻辑放在应用程序层中,否则我仍然需要在 sql 防火墙上打一个洞。由于我只想为 API 函数添加一个层(影响所有应用程序的那些 - 例如“GetEmployeeByName”),我仍然需要从 DMZ 访问数据库...
倾向于最佳答案是:托管 Web 服务的内部 Web 服务 API 服务器 - 这些服务可由 DMZ 中的所有 Web 服务器或通过 DMZ 中的代理服务器使用。 (所以只有一台服务器需要一个通过防火墙的 ssl 端口。)(当然所有内部服务器都可以访问。)
【问题讨论】:
-
层不必对应于单独的机器。如果您正确设计应用程序,“应用程序层”是否在同一台机器上、是否通过 Web 服务横向扩展都无关紧要。
-
如果我选择其中一个、直接 db 访问或应用程序层(防火墙规则仅适用于其中一个),所有需要数据库的逻辑都必须位于单独的服务器上,因为只有数据库访问位于防火墙的另一端。
-
这是一个实施决策,而不是设计决策。设计您的应用程序,使任一实现都可以工作而无需重写。
标签: sql-server wcf firewall