多个 SQL Server 实例会提高安全性吗?

Adr*_*tti 6 security sql-server architecture web-server

语境

让我们假设您有一个服务器,它公开一个 Web 服务器和一个或多个 Web 服务来存储和管理有关自然人的合理信息(假设,在这个例子中,有完整的病史,还有电话号码、电子邮件和其他私人信息)。

访问经过身份验证,您在代码中完成了达到合理安全级别所需的一切。

Web 服务器和 Web 服务运行在带有 IIS + ASP.NET 的 Windows Server 上,数据库位于单个 SQL Server 实例中。假设系统始终是最新的,日志经过仔细评估,系统配置正确,攻击者无法物理访问机器本身。

当前架构

即使与 DB 没有直接关系也要记住:

数据存储在 N+3 个不同的数据库中(每个数据库都配置了完全需要的权限,没有sa类似的访问权限,如所述如何保护应用程序的用户数据库表?)。

  • 一个日志数据库(Web 服务器帐户只写)。
  • 一个用于存储登录信息的数据库(对于 Web 服务器帐户只读,不同的 Intranet Web 应用程序将以不同的用户运行)。
  • 一个数据库将登录映射到物理数据库(以及其他用于管理帐户的内部内容),对于外部可访问的 Web 应用程序也是只读的。
  • 系统的每个用户都有一个单独的数据库(每个人都可以读和写)。

使用三种不同的 SQL Server 实例(一种用于日志,一种用于帐户和映射,一种用于所有用户数据库)会增加安全性还是只是复杂性?

这也会影响性能吗?(如果您在没有更多上下文的情况下无法回答这个问题,您可以简单地忽略性能问题,除非它们显然更糟)

此外,将映射信息和帐户合并在一起有什么缺点吗?(具有相同权限的单独数据库会以任何方式提高安全性?)

注意事项

我知道在安全方面通常“越多越好”(至少这是一个常见的座右铭)但缺点可能大于任何好处(如果有的话):

  • 硬件和软件成本增加。
  • 增加了复杂性(设置和维护),这是 IMO 的一大缺点,因为(可能)具有非最佳配置的更安全的系统可能比更简单的系统安全得多。

我的困惑是因为如果攻击者能够运行任意代码(由于我的应用程序中的错误或由于漏洞利用),那么事情在哪里并不重要:它拥有做他想做的事的所有资源,我假设我们不会足够快地检测到攻击以停止服务,那么与他必须执行操作的总时间相比,他需要了解有另一台机器要连接的时间很小。


我不知道这个问题是否是严格的主题,它似乎跨越多个 SE 站点,我不确定哪个是正确的。

Ken*_*her 2

一般来说,多个实例不会增加安全性,只会增加复杂性。有理由使用多个实例,但我认为它们不适合您的情况。

  • 您有不同的用户组需要管理(系统管理员、安全管理员等)访问权限。
  • 您的一个数据库需要与其他数据库位于防火墙的不同一侧。老实说,我不确定为什么这可能是必要的,但我已经看到它完成了。
  • 灾难恢复/HA
  • 截然不同的用例。例如
    • 报告数据与 OLTP(基本上是拆分负载)
    • 一个数据库是高事务性的,您希望将其optimize for ad hoc关闭,而其余数据库则希望将其打开。(需要不同的服务器级别设置以获得最佳性能)

您会注意到,其中只有一项与安全有关,而且这将是非常不寻常的。一般来说,这些类型的系统权限属于一个团队。然而,有时您需要隔离供应商包的实例,并且您别无选择,只能授予应用程序系统管理员权限。

就多个实例的性能而言,有一个相当明显的考虑因素。每个实例都有自己的开销。多个实例所需的内存/系统资源量始终高于单个实例。如果您愿意为额外的硬件支付费用,那么这应该不是什么大问题。当多个实例上的数据需要协同工作时,另一个性能问题就会出现。例如,编写一个将您的日志信息与登录信息联系起来的查询。如果数据位于两个不同的数据库上,那么就不会出现异常的性能问题。另一方面,如果您使用两个单独的实例,则必须使用链接服务器(性能+安全问题)或将所有数据加载到应用程序中并使用应用程序对其进行排序(可以适用于少量数据)但任何过去的事情都会让你头疼)。