首页 > 解决方案 > 将 MongoDB 用于多租户应用程序

问题描述

如何在多租户环境中使用 MongoDB?我所说的多租户是指多个组织应用程序使用的一个 MongoDB 实例。

因此,我们可以让 App A、App B 和 App C 使用同一个 MongoDB 实例,并且每个应用程序都彼此隔离,这意味着,例如,App A 的“用户”集合不能被 App B 访问,反之亦然反之亦然。

MongoDB 似乎没有可用于为每个应用程序分配的“命名空间”概念。

标签: databasemongodb

解决方案


您可以拥有基于角色的访问控制,并且可以控制允许哪个用户对每个资源执行什么操作。

从您的问题来看,您似乎对集合级别控制感兴趣。请参考这个。请确保您正在查看适用于 MongoDB 的正确版本。

因此,您最终会为每个租户获得不同的凭据。

警告; 在这个设计中,你不能扼杀嘈杂的邻居。

例如,用户定义的角色可以包含以下权限:

privileges: [
  { resource: { db: "products", collection: "inventory" }, actions: [ "find", "update", "insert" ] },
  { resource: { db: "products", collection: "orders" },  actions: [ "find" ] }
]

另一种选择是为每个租户创建单独的数据库。但这会增加您的管理(CI/CD/DevOps)成本。例如。必须对每个租户应用索引的更改。您需要确保正确应用更改。

这取决于有多少租户。对于少数人来说是可以的。

对于大量数据,最好是纯 SaaS,并将tenantId 作为您存储、检索、删除等的每个文档的一部分。


推荐阅读