【问题标题】:Using MongoDB for multi-tenant applications将 MongoDB 用于多租户应用程序
【发布时间】:2021-06-14 16:57:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: database mongodb


    【解决方案1】:

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

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

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

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

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

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

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

    这取决于有多少租户。数量少就可以了。

    对于大量数据,最好是纯 SaaS,并且在您存储、检索、删除等的每个文档中都包含 tenantId。

    【讨论】:

    • 实际上,在我的情况下,每个应用程序都可以有任何一个或两者(来自您的示例)---“库存”和“订单”集合,并且都会写入和读取它。我不打算以编程方式为每个数据库创建一个数据库。
    • @quarks 刚刚在答案中添加了更多细节
    • “纯粹基于 SaaS”是什么意思?
    • 软件即服务,为多个租户提供对您应用的访问权限。因此将它们全部保存在一个数据库中(由tenantId分隔)
    猜你喜欢
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2018-08-29
    • 2011-05-05
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多