使用内部Web服务而不是直接访问数据库

时间:2012-11-16 20:57:30

标签: sql-server wcf firewall

我正在设计网络的各个部分。我目前对未来软件项目设计的想法:

DMZ中的Web服务器。这个网络服务器在防火墙上打了一个洞(在sql端口上),与一个内部用于所有数据管理的MSSQL数据库通信。

问题:没有防火墙上的漏洞可以与数据库服务器通信,让DMZ中的应用程序可以使用的内部Web服务器托管Web服务会更好/更安全,数据库逻辑背后是网络服务(打孔只与该网络服务器通信。)

webservices实现只允许一个地方更新任何API更改 - 这就是我考虑它的原因 - 尽管它可能比直接数据库和查询访问速度慢。

关于哪个更好的想法?

编辑:意识到除非我将所有应用程序/业务逻辑放在应用程序层中,否则我仍然需要在防火墙中打入一个用于sql的漏洞。由于我只想为API函数添加一个图层(那些影响所有应用程序的图层 - 例如“GetEmployeeByName”),我仍然需要从DMZ访问数据库......

倾向于最佳答案:托管Web服务的内部Web服务API服务器 - 可以由DMZ中的所有Web服务器使用,也可以通过DMZ中的代理服务器使用。 (因此只有一个服务器需要通过防火墙的ssl端口。)(当然所有内部服务器都可以访问。)

1 个答案:

答案 0 :(得分:2)

关于何时三层架构是更好的模型(here's one),有很多讨论。您应该可以在Google上找到更多信息。

简短回答:如果安全性和可扩展性是您的目标,那么使用应用层服务可能会更好。在开发所有层和层时,请务必关注defense in depth

答案很长:这取决于你的需求。

编辑以响应您的编辑:如果有意义的话,我建议您将大部分业务逻辑放在应用层中。您的Web服务器应主要是演示文稿。 但是,无论您将业务逻辑放在何处,都应该将所有数据访问权限放入服务中 - Web层应该只与应用层进行通信。

Here是一个开始寻求深入研究三层方面的人。 Here对于分层等等是一个不错的介绍。