SQL Server是否应该和IIS安装在同一台机器上?

23

我正在收听第19期播客,Joel和Jeff正在争论在同一台计算机上运行SQL Server和IIS安装的问题。我必须说,听起来像是Jeff向Joel低头了,但我猜不出谁是谁。

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

通常我会分别运行它们(Joel的偏好),但我可以理解Jeff的观点,认为这两个组件更接近彼此。

4个回答

46
为了安全起见,最好将Web服务器和数据库服务器分开,最好在两者之间设置防火墙。Web服务器面向整个世界,不幸的是有些人会窃取或破坏这些服务器上包含的信息。
然后是性能方面。众所周知,SQL Server 喜欢内存,IIS 也一样,特别是如果网站广泛使用缓存和会话信息。因此,这里存在潜在的冲突。拥有专用的 SQL Server 机器,显然比单一机器负载更好。
然后,分离可以更容易地识别需要进行调优,并具有调整各个硬件组件的能力。
总之,在现场环境中应对 IIS 和 SQL Server 的需求的机器,其成本并不一定比为每个服务器规定的特定要求而设计的两台机器更便宜。(Jeff Atwood 在其中一期播客节目中提到,升级一台机器的费用与获得第二台机器的费用相同)。

12

@MarkR

将 SQL Server 移到另一个盒子可以增强安全性,这与暴露的攻击面有关。

Web 服务器容易受到来自互联网的恶意访问。尽管我们希望这种事情永远不会发生,但是一些漏洞可以通过穿过防火墙的畸形请求被利用。

利用这些漏洞可能导致任意代码执行。

如果 Web 服务器以此方式受到攻击,那么在该计算机上运行的其他任何内容都变得容易受到攻击,攻击软件可以在特权上下文中运行。受攻击的机器的攻击面更广泛了。

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

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

进一步推广这个原则,这也是使用存储过程的论据。如果 Web 服务器只能使用存储过程访问数据库服务器,则接口(因此攻击面)会受到巨大限制。如果 Web 服务器能够对数据库服务器执行任意 SQL,则攻击面将比必要的更大,数据面临的风险也大大增加。

在数据很有价值的系统中,尽管这些风险相对较小,但它们确实存在,并确定此类风险的业务影响是解决方案设计的重要方面。


11

将它们部署在同一台机器上:

  • 减少它们之间的延迟 - 因此,如果有许多简单的查询,这可以提高性能
  • 使开发和性能测试更加容易,因为您可以使用单个框(或虚拟机)进行操作

如果应用程序不需要冗余并且不需要扩展,则将它们放置在同一台机器上是明确的优势 - 维护起来要容易得多。

我认为安全性的论点没有任何影响 - 我没有看到分离它们的任何安全好处。 Web服务器需要具有足够的访问权限才能查看和修改所有或大部分数据,因此,如果完全受损,SQL服务器也将受到影响。


5
您可以拥有10个Web服务器访问一个单一的数据库,每个服务器具有不同的权限。所以如果其中1个Web服务器被攻击,只有10%的数据会受到损坏。如果您有100个服务器,则只有1%的数据会受到损坏。 - Pacerier

6
对于非常敏感的网站,使用防火墙隔离的单独服务器有其优点,但也带来了一些问题。
  1. 在拆分的IIS-SQL服务器上执行查询的性能可能会很慢,因为需要通过网络传输数据,即使服务器相距仅两英尺,DNS也可能仍然是一个因素,因此可能需要进行一些工作才能使应用程序正常运行。
  2. 管理。这显而易见,需要2个服务器,2个Windows许可证以及涉及的管理和穿越防火墙的复杂性。
拆分服务器建议:
  1. 在服务器之间安装千兆局域网。
  2. 将查询优化为存储过程。
  3. 将查询优化为仅返回最小量的数据。
  4. 确保服务器间寻址使用IP地址或有效的DNS查找。
  5. 为SQL提供足够的内存以处理临时结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接