23

我正在收听 podcast #19,Joel 和 Jeff 正在争论在与您的 IIS 安装相同的机器上运行 SQL Server。我不得不说,这听起来像是 Jeff 对 Joel 弃牌了,但话又说回来,我只是在猜测哪个是哪个。;)

各自的优缺点是什么?哪个更好?

我通常单独运行它们(Joel 的偏好),但我可以看到 Jeff 的观点,即两者之间的距离更近。

4

4 回答 4

46

出于安全目的,最好将 Web 和数据库机器分开,最好在两者之间设置防火墙。Web 服务器向整个世界公开。不幸的是,有些人乐于窃取或破坏这些服务器上包含的信息。

然后是性能方面。众所周知,SQL Server 喜欢内存。IIS 也是如此,尤其是当网站大量使用缓存和会话信息时。所以你在这里也有潜在的冲突。为 SQL Server 配备一台专用机器显然比让一台机器完成所有负载要好。

然后,分离可以更容易地识别调整的需要和调整单个硬件组件的能力。

总而言之,一台足够强大的机器可以同时满足实时环境中 IIS 和 SQL Server 的需求,不一定比为每个服务器的特定要求指定的两台机器便宜。(Jeff Atwood 在其中一个播客中提到,升级一台机器的成本与购买第二台机器的成本相同)

于 2008-11-08T15:58:34.827 回答
12

@MarkR

通过将 SQL Server 移动到另一个盒子确实增强了安全性,这与暴露的攻击面有关。

Web 服务器暴露于来自 Internet 的恶意访问。人们希望它永远不会发生,但已经存在(并且将来可能存在)可以通过穿越防火墙的格式错误的请求来利用的漏洞。

利用其中一个漏洞可能导致任意代码能够执行。

如果 Web 服务器以这种方式受到威胁,那么在该机器上运行的任何其他东西现在都容易受到攻击,并且漏洞利用软件可能会在特权上下文中运行。受感染机器的攻击面要广泛得多。

如果 SQL Server 安装在同一台机器上,任何数据库都容易受到攻击。

现在,如果 SQL Server 安装在单独的机器上,它本身只能通过其公共接口访问。数据库的附加表面仅限于该接口。因此,要破坏数据库,您现在必须首先破坏 Web 服务,然后是 SQL Server。这比将它们放在同一台机器上要困难得多。

进一步扩展原理,它也是使用存储过程的一个论据。如果 Web 服务器只能使用存储过程访问数据库服务器,那么接口和攻击面就会受到很大限制。如果 Web 服务器能够对数据库服务器执行任意 SQL,那么攻击面就会再次变得更大,并且数据的风险也会大大增加。

在数据有价值的系统中,这些风险虽然相对较小,但却非常真实,确定此类风险的业务风险是解决方案设计的一个重要方面。

于 2008-11-08T21:04:59.453 回答
11

将它们放在同一台机器上:

  • 减少它们之间的延迟 - 因此,如果您有很多简单的查询,这可以提高性能
  • 使您的开发和性能测试更容易,因为您可以使用单个盒子(或 VM)来完成它

如果应用程序不需要冗余并且不需要横向扩展,那么将它们放在同一个盒子上是绝对的胜利 - 它更容易维护。

我认为安全论点没有任何意义——我认为将它们分开没有任何安全好处。Web 服务器需要对数据库有足够的访问权限才能查看和修改全部或大部分数据,因此如果它完全受到攻击,SQL 框也会受到有效攻击。

于 2008-11-08T16:35:28.997 回答
6

对于非常敏感的站点,在它们之间使用防火墙的单独服务器的优势可能很有用,但它带来了许多问题。

  1. 拆分 IIS 上的查询性能 - 由于需要通过网络传递数据,SQL 服务器可能运行非常缓慢,即使服务器相距 2 英尺,DNS 也可能仍然是一个因素,因此可能需要做一些工作才能让应用程序工作以及分裂。
  2. 管理。这可能很明显,但它的 2 个服务器、2 个 Windows 许可证和所涉及的管理以及穿越防火墙的复杂性。

拆分服务器建议:

  1. 在服务器之间安装千兆 LAN。
  2. 优化查询以作为存储过程运行
  3. 优化查询以仅返回最少量的数据。
  4. 确保服务器间寻址使用 IP 地址或有效的 DNS 查找。
  5. 为 SQL 负载提供足够的临时结果。
于 2011-09-27T14:52:13.380 回答