我正在收听播客#19,而Joel和Jeff正在争论在与IIS安装相同的机器上运行SQL Server。我不得不说,这听起来像Jeff折叠到了Joel,但是我再次猜测哪一个是哪个。 ;)
每种的优点和缺点是什么?哪个更好?
我通常会单独运行它们(Joel的偏好),但我可以看到Jeff的观点,即两者彼此更接近。
答案 0 :(得分:45)
对于安全目的,最好将Web和数据库机器分开,最好在两者之间安装防火墙。 Web服务器向全世界公开。不幸的是,有些人乐于窃取或破坏这些服务器上包含的信息。
然后是表现方面。众所周知,SQL Server喜欢内存。 IIS也是如此,特别是如果网站广泛使用缓存和会话信息。所以你在这里也有潜在的冲突。拥有一台专用的SQL Server机器显然比让一台机器完成所有负载更好。
然后,分离允许更容易识别调整的需要以及调整单个硬件组件的能力。
总而言之,一台功能强大的机器可以满足现场环境中IIS和SQL Server的需求不一定比根据每台服务器的特定要求选择的两台机器便宜。 (Jeff Atwood在其中一个播客中提到,升级一台机器的成本与获得第二台机器相同)。
答案 1 :(得分:12)
@MarkR
通过将SQL Server移动到另一个框,确实增强了安全性,这与暴露的攻击面有关。
Web服务器受到来自Internet的恶意访问。人们希望它永远不会发生,但是已经(并且将来可能存在)漏洞可以通过穿越防火墙的错误请求来利用。
利用其中一个漏洞可能导致任意代码能够执行。
如果Web服务器以这种方式受到攻击,那么在该计算机上运行的任何其他内容现在都是易受攻击的,并且利用软件可能会在特权上下文中运行。受感染机器的攻击面要宽得多。
如果SQL Server安装在同一台计算机上,则任何数据库都容易受到攻击。
现在,如果SQL Server安装在单独的计算机上,它本身只能通过其公共接口访问。数据库的附加表面仅限于该接口。因此,为了破坏数据库,您现在必须先破坏Web服务,然后是SQL Server。这比在同一台机器上使用它们要困难得多。
进一步扩展原则,它也是使用存储过程的论据。如果Web服务器只能使用存储过程访问数据库服务器,则接口以及受攻击表面受到大量约束。如果Web服务器能够对数据库服务器执行任意SQL,则攻击面再次大得多,并且数据的风险也会大大增加。
在数据有价值的系统中,这些风险虽然相对较小,但却非常真实,并且确定此类风险的业务风险是解决方案设计的一个重要方面。
答案 2 :(得分:11)
将它们放在同一台机器上:
如果应用程序不需要冗余而且不需要扩展,那么将它们放在同一个盒子上就是明确的胜利 - 它更容易维护。
我认为安全性论点没有任何重要性 - 我认为分离它们没有任何安全性好处。 Web服务器需要具有足够的数据库访问权限才能查看和修改所有或大部分数据,因此如果它完全被破坏,SQL框也会被有效地泄露。
答案 3 :(得分:6)
对于非常敏感的站点,它们之间具有防火墙的单独服务器的优势可能很有用,但它带来了许多问题。
拆分服务器建议: