我有一个应用程序连接到mongodb实例上的不同数据库。不同的数据库适用于不同的客户。我想知道如果我使用单个用户登录到不同的数据库,我的客户数据是否会受到损害。此外,这个用户必须是root用户吗? readWrite角色就可以了。我将通过java后端连接到数据库。
答案 0 :(得分:1)
对此没有直截了当的答案。这是关于风险和成本效益的。
如果使用相同的数据库用户连接到任何数据库,则客户端数据分离更多地依赖于应用程序中的业务逻辑。如果您的代码的任何部分可以决定连接到任何客户端数据库,那么来自一个客户端的请求可能(并且根据我的经验,最终将)最终在不同客户端的数据库中。有些因素会使这种情况更容易发生,例如,如果很多人开发你的应用程序的时间较长,有人会犯错误。
更安全的选择是拥有一个很少更改的中心部分或组件,严格监控的更改,对于每个客户端会话(甚至请求)将获取客户端的凭据并使用它连接到数据库。这样,开发人员未来的任何错误都将在范围上受到限制,例如,他们将无法使用错误的数据库。然后我们没有提到非故意的应用程序缺陷,这将允许攻击者做同样的事情,而且更有可能。如果您具有强大的执行和分离,即使出现某些应用程序漏洞,来自一个客户端的恶意用户也可能无法访问其他客户端数据,因为连接将仅限于正确的数据库。 (请注意,即使在这种情况下,您的应用程序也需要访问所有客户端数据库凭据,因此完全违反您的应用程序或服务器仍然意味着所有客户端数据都会丢失给攻击者。但并非每次成功的攻击都会以完全妥协的方式结束。 )
您是否这样做应该取决于风险。您要回答的一个问题是,如果发生跨客户端数据泄露,您需要支付多少费用。如果这不是什么大问题,那么业务逻辑中的分离可能就行了。如果这意味着停业,那肯定是不够的。
至于用于连接的用户应该是root - 不,绝对不是。遵循最小特权原则,您应该使用仅对其所需事物拥有权限的用户,即。连接到该数据库,没有别的。