Adr*_*tti 6 security sql-server architecture web-server
让我们假设您有一个服务器,它公开一个 Web 服务器和一个或多个 Web 服务来存储和管理有关自然人的合理信息(假设,在这个例子中,有完整的病史,还有电话号码、电子邮件和其他私人信息)。
访问经过身份验证,您在代码中完成了达到合理安全级别所需的一切。
Web 服务器和 Web 服务运行在带有 IIS + ASP.NET 的 Windows Server 上,数据库位于单个 SQL Server 实例中。假设系统始终是最新的,日志经过仔细评估,系统配置正确,攻击者无法物理访问机器本身。
即使与 DB 没有直接关系也要记住:
数据存储在 N+3 个不同的数据库中(每个数据库都配置了完全需要的权限,没有sa
类似的访问权限,如所述如何保护应用程序的用户数据库表?)。
使用三种不同的 SQL Server 实例(一种用于日志,一种用于帐户和映射,一种用于所有用户数据库)会增加安全性还是只是复杂性?
这也会影响性能吗?(如果您在没有更多上下文的情况下无法回答这个问题,您可以简单地忽略性能问题,除非它们显然更糟)
此外,将映射信息和帐户合并在一起有什么缺点吗?(具有相同权限的单独数据库会以任何方式提高安全性?)
我知道在安全方面通常“越多越好”(至少这是一个常见的座右铭)但缺点可能大于任何好处(如果有的话):
我的困惑是因为如果攻击者能够运行任意代码(由于我的应用程序中的错误或由于漏洞利用),那么事情在哪里并不重要:它拥有做他想做的事的所有资源,我假设我们不会足够快地检测到攻击以停止服务,那么与他必须执行操作的总时间相比,他需要了解有另一台机器要连接的时间很小。
我不知道这个问题是否是严格的主题,它似乎跨越多个 SE 站点,我不确定哪个是正确的。
一般来说,多个实例不会增加安全性,只会增加复杂性。有理由使用多个实例,但我认为它们不适合您的情况。
optimize for ad hoc
关闭,而其余数据库则希望将其打开。(需要不同的服务器级别设置以获得最佳性能)您会注意到,其中只有一项与安全有关,而且这将是非常不寻常的。一般来说,这些类型的系统权限属于一个团队。然而,有时您需要隔离供应商包的实例,并且您别无选择,只能授予应用程序系统管理员权限。
就多个实例的性能而言,有一个相当明显的考虑因素。每个实例都有自己的开销。多个实例所需的内存/系统资源量始终高于单个实例。如果您愿意为额外的硬件支付费用,那么这应该不是什么大问题。当多个实例上的数据需要协同工作时,另一个性能问题就会出现。例如,编写一个将您的日志信息与登录信息联系起来的查询。如果数据位于两个不同的数据库上,那么就不会出现异常的性能问题。另一方面,如果您使用两个单独的实例,则必须使用链接服务器(性能+安全问题)或将所有数据加载到应用程序中并使用应用程序对其进行排序(可以适用于少量数据)但任何过去的事情都会让你头疼)。