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

Sql server 使用内部Web服务而不是直接访问数据库,sql-server,wcf,firewall,Sql Server,Wcf,Firewall,我正在设计网络的各个部分。我目前对未来软件项目设计的想法: DMZ中的Web服务器。此Web服务器在防火墙(sql端口上)上打了一个孔,用于与MSSQL数据库通信,MSSQL数据库是所有数据管理的内部数据库 问题:与其在防火墙上打一个洞来与数据库服务器对话,不如让一个内部web服务器承载DMZ中的应用程序可以使用的web服务,并在web服务背后使用数据库逻辑(只打一个洞来与该web服务器对话),这样会更好/更安全吗 webservices实现只允许在一个地方更新任何API更改—这就是我考虑它的原

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

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

问题:与其在防火墙上打一个洞来与数据库服务器对话,不如让一个内部web服务器承载DMZ中的应用程序可以使用的web服务,并在web服务背后使用数据库逻辑(只打一个洞来与该web服务器对话),这样会更好/更安全吗

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

你觉得哪一个更好

编辑:意识到除非我把所有的应用程序/业务逻辑放在应用程序层,否则我仍然需要在防火墙上打一个洞来实现sql。因为我只想为API函数(那些影响所有应用程序的函数,比如“GetEmployeeByName”)添加一个层,所以我仍然需要从DMZ访问DB


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

关于三层体系结构何时是更好的模型有很多讨论()。你应该可以在谷歌上找到更多

简短回答:如果安全性和可伸缩性是您的目标,那么最好使用应用层服务。在开发所有层时,请务必关注

详细回答:这取决于你的需要

根据您的编辑进行编辑:如果这样做有意义的话,我建议您将大部分业务逻辑放在应用层中。您的web服务器应主要是演示文稿。 但是,无论您将业务逻辑放在何处,您都应该将所有数据访问放在服务中—web层应该只与应用层对话


“这是挖掘三层结构的开始。”这是一个很好的分层和诸如此类的介绍。

谢谢。这取决于你,但如果你有意见,我不会介意他们根据我提出的编辑。你的链接文章很有帮助,因为谷歌搜索对我不起作用(我真的不知道该搜索什么)@DFTR:Edited以回答你进一步的问题。我正在考虑其复杂性,从不得不编写服务和编写代码来使用它们,并通过在防火墙后面以web服务的形式提供整个业务层来请求时间。我必须建立一些测试,看看我喜欢什么——不管怎样,谢谢你提供了最有用的答案。@DFTR:我通常发现,提供WCF服务和客户端非常快。祝你好运层不需要对应于单独的机器。如果您正确设计了应用程序,“应用层”是否在同一台计算机上、是否通过web服务扩展都无关紧要。如果我选择其中一个,直接db访问或应用层(仅适用于其中一个的防火墙规则),所有需要数据库的逻辑都必须位于单独的服务器上,因为唯一的数据库访问位于防火墙的另一端。这是一个实现决策,而不是设计决策。设计应用程序,使两种实现都可以工作,而无需重写。