允许Web用户访问数据库是一项非常微妙的工作,需要认真考虑,不能马虎。
TechRepublic成员E Spigle最近在TechRepublic Technical的QA论坛上提出了以下问题:
在我工作的公司,我们正在做一项工作,将一个非常旧的FoxPro系统转换成MS SQL/VB系统。我们在内部已经广泛使用SQL数据库。目前位于我们局域网的防火墙后面,只能支持内部使用。但是,我们的一些转换程序带来了一些Web在线应用程序。现在我们面临一个两难的境地。为了使Web用户和局域网用户同时访问同一个数据库,我们必须找到一个好的解决方案。目前,我们的iis 6.0 Web服务器在DMZ中。如何让web服务器为网络应用程序提供数据库访问?
问题分析
这是一个很有意思的问题。乍一看,很简单,但当你深入考虑,你会发现它的复杂性。每当你想让数据库可以上网的时候,有很多问题需要考虑。我要考虑的第一个问题是‘我们在处理什么样的数据?’以及“信息的敏感程度如何?”
我之所以考虑这两个问题,是因为我需要确定这些数据能承受多大的风险。如果我不能承担任何风险,我可能会投入大量的资源和精力,尽可能保证我的数据不可侵犯。但如果能承担一定风险,我会谨慎,但不会采取极端手段。比如数据是病人的病史信息,我会不遗余力的保护数据安全,也就是说不通过IIS连接,不使用sql server。
在我详述之前,我想声明我对微软没有偏见。我只是想规避风险。微软的产品在上述条件下都能得到很好的保护和很好的工作。然而,由于其受欢迎程度,微软产品更容易成为病毒、蠕虫、黑客等的目标。避免在风险承受能力低的环境下使用微软产品,可以减少我的烦恼。
而且根据数据可以承受的风险程度,我会决定web服务器和数据库之间是否需要加密,数据库中的数据是否需要加密。如果我们想要最高的安全性,我会选择使用内置或第三方加密软件。如果数据对安全性要求不是那么高,我会选择完全不加密,或者选择更低的加密方式。
最后,我还需要决定使用哪种连接来访问数据库。如果加密是必要的,或者/和访问是通过客户端服务器软件(如问题中所述),那么我需要使用VPN和应用层代理。此外,我可能会考虑在Web服务器和数据库之间建立一个应用服务器。
以上问题的答案帮助我设计数据库访问环境。
建立一个系统
我假设E Spigle问题中描述的数据敏感度不是很高,所以使用IIS和SQL Server是可以接受的。如图A所示:
答:网络规划
在图A所示的网络通信中,只允许HTTP或1443带80端口到达Web服务器。然后,Web服务器通过TCP协议通过端口1433与SQL服务器通信。另一种方法是使用微软的ISA服务器作为转换代理,并允许它控制与SQL server的通信。
无论选择哪种方法,都有一系列问题需要考虑,以确保SQL Server数据库的安全性。这些问题可以在网上找到。例如,它们包括保护您的Windows服务器、保护IIS、保护SQL server,以及处理Web服务器和SQL Server之间的通信,包括身份验证、协议等等。幸运的是,微软在MBSA(微软基线安全分析器)提供了一些帮助。
最后,您的开发人员和数据库管理员需要将一系列标准和程序集成到应用程序代码和数据库中,以最小化安全风险。
最佳计划和可接受的风险
本文描述了一个看似简单的问题背后的一些复杂性,“我们如何才能最好地让网络应用程序通过web服务器访问数据库?”可能会有资金压力,但最终还是要归结到可承受的风险水平和投资之间的平衡。这是每个面临这个问题的人都需要考虑的。