AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 29181
Accepted
Middletone
Middletone
Asked: 2009-06-21 10:26:08 +0800 CST2009-06-21 10:26:08 +0800 CST 2009-06-21 10:26:08 +0800 CST

我应该在提供网页的同一个盒子上托管我的数据吗?

  • 772

有一天我在听 Hanselminutes 时就出现了这个问题。在什么情况下应该将数据与代码分开?例如,在我在数据库上工作的其中一个系统中,它与服务器 Web 内容位于同一个盒子上。在另一种情况下,我们将它们分开。哪个更好,为什么你会有这种感觉?

我个人认为,如果你能负担得起,分离是好的。

更好地保护数据免受入侵者的侵害。分离允许更好的故障转移控制。和分离使您能够更好地管理和负载平衡流量。

这确实成为问题的地方在于数据访问时间。与通过网络相比,两者在一起时盒子上的延迟显着降低。

你有什么想法?

security database web-hosting
  • 12 12 个回答
  • 344 Views

12 个回答

  • Voted
  1. Antoine Benkemoun
    2009-06-21T12:23:33+08:002009-06-21T12:23:33+08:00

    至少是非常糟糕的主意。我之前有一个设置,我们在同一台服务器上安装了 Apache+MySQL,它的平均负载通常会超过 10 次,并且页面需要永远加载。我们拆分这两个服务并将 MySQL 放在一个较小的服务器上。两台服务器都不会超过 0.35 的平均负载。

    算一算……将Web服务器+数据库服务器放在同一台服务器上会有很多损失。

    埃文也有一个很好的观点。将事物合并到机器中往往会导致许多捷径,这使得横向扩展变得更加困难。一项服务 = 一个操作系统是一个很好的经验法则(本来可以说一项服务 = 一台机器,但现在有了虚拟化)。

    • 1
  2. Jas Panesar
    2009-06-21T12:29:54+08:002009-06-21T12:29:54+08:00

    我想到的第一个想法是不要过度设计解决方案。

    把所有东西都放在一个盒子里没关系。万能的 Stack Overflow 也是这样开始的。

    当您有足够的需求(和资源)来证明多个盒子的合理性时,就去做。建立完美的设置不会第一次发生。

    无论您如何设置它以快速恢复和恢复,都可以保留出色的备份。异地复制您的数据库,以便您可以在任何地方重建和恢复它(到云、其他主机等)

    祝你好运!

    • 1
  3. sucuri
    2009-06-21T13:02:32+08:002009-06-21T13:02:32+08:00

    从安全的角度来看,它应该放在单独的盒子上。但是,根据预算,接受或不接受风险应该是一个商业决定。

    这是为什么?首先,最佳实践建议:

    • 深度防御。
    • 最小权限和数据分离

    如果您的数据库位于单独的机器上,则需要额外的步骤来攻击它。如果您遵循深度防御,Web 服务器将无法访问除 db 之外的 db 框上的任何其他内容(因此,没有 shell,没有运行脚本等)。这就是为什么防火墙也有利于内部控制的原因。

    如果您确实在安全方面做得很好,那么您的 web-2-db 用户将在 db 上拥有最低权限,只能访问/修改他真正需要的内容(因此,没有删除表等)。有趣的是,对于只需要从几个表中选择和更新的用户来说,我们经常在数据库上看到 GRANT *。

    因此,仅仅因为很多人在单个机器上运行 db+web 服务器 + 邮件服务器 + DNS,并不意味着这是最好的安全决策,只是基于 $$ 的可接受风险。

    • 1
  4. Brent
    2009-06-21T18:39:55+08:002009-06-21T18:39:55+08:00

    要记住的一件重要的事情是,当您从一台机器变为两台机器时,停机的机会会加倍 - 也就是说,如果您的站点依赖于数据库来运行。如果正常运行时间对您很重要,那么您可能正在查看 4 个(或更多)服务器 - 然后您就很成功了。

    我认为您不必担心数据库与网络服务器通信的速度。通过添加机器获得的 CPU 能力将加速数据库查询本身,并且与您在实时互联网上提供网页的速度相比,即使是 100Mb 的服务器之间的传输也应该可以忽略不计。

    • 1
  5. Best Answer
    K. Brian Kelley
    2009-06-21T18:51:29+08:002009-06-21T18:51:29+08:00

    您考虑分离数据库和 Web 服务器的原因有很多,其中一些原因会与已经提到的内容相呼应。

    首先,存在潜在的性能问题。通常,数据库服务器喜欢内存。它可以分配给缓存数据的内存越多,从磁盘读取所需的访问权限就越少。所以有记忆是有好处的。因此,您可能会在 Web 服务器和数据库服务器之间遇到内存争用问题。话虽如此,在很多情况下,数据库服务器与 Web 服务器在同一个机器上运行,例如使用 MySQL 或 SQL Server Express,甚至使用 SQL Server 2005 Reporting Services 的完整 SQL Server。

    其次,在某些情况下,您的应用程序可能会使用部分但不是全部数据。如果内部系统也涉及数据库,则尤其如此。这在网络托管环境中不太可能发生,我猜您正在根据您的标签查看。但在这种情况下,您可以将 Web 服务器对数据库的访问限制为仅需要的访问权限。是的,如果 Web 服务器被入侵,他们可以获得该访问权限,但如果这是一组有限的权限,他们就无法获得所有内容。将它托管在同一个 Web 服务器上,这是一个完全不同的故事。

    第三是因为您可以通过查看使用 IDS/IPS 的 Web 服务器和数据库服务器之间的网络流量来了解您的 Web 服务器是否受到损害。例如,如果我们正在谈论 SQL Server 并且 xp_cmdshell 被发送到数据库服务器或 sp_configure,这应该告诉 IDS/IPS 有什么事情发生了。这会立即警告您 Web 服务器已被入侵。

    四是职责分离。如果您有负责部署 Web 应用程序的人员,他们可能需要升级到 Web 服务器的权限才能这样做。什么样的权利取决于你在做什么,什么操作系统,什么网络服务器等等,但你明白了。如果这些人不应该访问数据库服务器中的所有内容,并且对数据库服务器的更新由不同的一组人(如 DBA)处理,那么您可以通过使用不同的服务器更好地保护公司。

    • 1
  6. Matthew Flaschen
    2009-06-21T10:31:12+08:002009-06-21T10:31:12+08:00

    我不认为单独的盒子安全性会更好。如果攻击者破坏了提供 Web 服务的机器,那么无论如何这都可能导致数据库破坏。故障转移和负载平衡/可扩展性参数要好得多。

    但如果你只有一个网络盒子,我肯定更愿意将数据保存在同一个盒子上。

    • 0
  7. Dentrasi
    2009-06-21T10:44:38+08:002009-06-21T10:44:38+08:00

    如果他们可以访问您的网络机器,他们可以从您的配置文件中提取数据库详细信息,加载一个 php shell,然后从那里转储数据。一个安全优势是如果您在同一台机器上拥有多个数据库。

    但是,它允许您分散负载,如果您需要这样做以提高性能,那很好,只要您有快速连接,如前所述。

    • 0
  8. MaxDPS
    2009-06-21T10:51:34+08:002009-06-21T10:51:34+08:00

    如果您担心冗余,那么将所有数据放在一个盒子上并在另一个盒子上备份会很好。

    我同意,如果可以负担得起,分离会更好。

    • 0
  9. Jeremy Coenen
    2009-06-21T11:12:36+08:002009-06-21T11:12:36+08:00

    如果盒子可以处理负载 CPU/RAM - 那么出于性能原因将它们放在同一个盒子上可能会更好,因为 Web 服务器和数据库服务器之间没有网络延迟。

    • 0
  10. Evan Anderson
    2009-06-21T11:40:39+08:002009-06-21T11:40:39+08:00

    我对一种方式与另一种方式没有强烈的意见。但是,如果您打算“向外扩展”,您可能会考虑使 Web 服务器尽可能无状态,以便在不重新设计设计的情况下进行扩展。

    • 0

相关问题

  • 为什么使用authorized_keys通过ssh自动登录不起作用?

  • 如何启用与 SQL Server 实例的加密连接?

  • 从多个位置保护远程服务器/工具访问的最佳方法是什么?

  • 在 SOHO 环境中实施的最佳 VPN 技术是什么?[关闭]

  • 保护新的 Ubuntu 服务器 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve