具有三个不同应用程序的场景
如果您在大多数情况下拥有三个不同的应用程序,那么它们首先不应该都拥有对数据库的完全访问权限,而只是每个人都需要的数据。如果他们都需要相同的数据,那已经是一种滥用数据库作为同步机制的设置。如果那是数据库的主要用途,那没关系,但在大多数情况下,这种情况有其自身的问题并表明存在设计问题。但是让我们假设由于某种原因这是给定的。
您仍然应该使用不同的访问凭据(用户名和密码),原因如下:
- 在某个时候,一个应用程序可能实际上开始拥有只有它关心的数据并且只有它应该访问,然后最初的假设就被打破了,无论如何你都应该设置单独的密码。但是现在你已经在生产中,用户负载很重,并且冒着犯一些影响实时用户的小错字的风险。你想避免这种情况,所以一开始就做对
- 如果有人闯入并破坏了您的应用程序以使您的数据库被访问,您需要查明该漏洞。如果您知道使用的凭据,则可以识别应用程序。通过一个非常简单且便宜的准备步骤,这已经减少了 2/3 的搜索空间。
- 如果您的某个应用程序的安全性被破坏并且您需要更改凭据,您希望将影响降到最低。如果他们都拥有相同的凭据,他们都需要更新他们的凭据。立即地。现在您需要同时修复三个应用程序,并且您可能会犯一个小的拼写错误并给您的用户带来一些问题,而不仅仅是一个问题。
- 2) 也适用于其他问题,例如应用程序生成非常慢的查询,拖累数据库,知道应用程序做了它是必不可少的,所以你需要单独的凭据(至少单独的用户 ID,但你也可以使用单独的密码)。
- 如果有人闯入并破坏了您的应用程序,您可能需要立即关闭该访问权限。这意味着您的所有三个应用程序都将停止工作,因为它们不再能够访问您的数据库,而不仅仅是一个。如果其他应用程序之一非常重要,您不想立即关闭数据库访问,这意味着您为攻击者提供了更大的行为不端机会窗口。
三台不同服务器上具有相同应用程序的场景
这确实是一个比较常见的场景,所以其他场景的前言(三个应用程序访问同一个数据库以相同的权限是一种设计味道)不适用!
在这里使用不同的凭据确实不会增加安全性,但会增加维护成本。除了极少数例外(见下文)。
在这种情况下,上面指出的大多数问题都会消失或减少到这样的程度:在所有服务器上使用相同凭据进行维护的便利性通常胜过获得的安全性。尽管如此,仍然存在的一点是高可用性的划分。这主要适用于以不同方式访问三台服务器的情况,这样很可能其中一台服务器被入侵而其他服务器没有受到损害。比如说一个覆盖亚洲,一个欧洲和一个美洲,它们托管在不同的地方,甚至操作系统版本也可能不同。在这种情况下,如果一台主机受到威胁,您可以关闭该主机的访问,而不会影响其他主机。如果它们服务于相同的 API/区域,原则上可能同样适用,即,如果一个被入侵,你可以先交换托管凭据,而其他人仍然可以服务请求。但是,通常所有主机都会在该设置中共享相同的技术堆栈和环境 - 因此在大多数情况下,当一个主机的安全性被破坏时,所有主机的安全性都会被破坏,并且可能只是尚未被利用。所以这只适用于极少数情况。如果您需要询问它,您的应用程序设置可能不是这种情况。