mysql - Multi-Tenancy 数据库架构 : Handling case where tenants need to share data

标签 mysql database schema multi-tenant

我正在尝试为将由多个租户使用的新 Web 应用程序创建架构。我过去做过 Multi-Tenancy 设计,每个租户使用一个模式,但在这个新应用程序中,租户将需要能够广泛共享对数据的访问。

这是我使用伪应用程序的场景:

  • A 公司注册“项目跟踪器”以跟踪其软件项目
  • B 公司也注册跟踪他们的软件项目
  • A 公司在 Project Tracker 中创建了一个包含大量工作项的新项目
  • A 公司然后将其中一些工作项目分配给 B 公司内部实际执行工作的用户(例如承包商场景)

我还需要支持另一个皱纹:

  • 新软件项目的客户还需要能够登录并查看项目状态,即使他们在技术上不是租户也是如此

我意识到我可以使用单独的模式和联合用户来做到这一点,但我正在努力尽可能简化体验。由于它是一个网络应用程序,我想使用电子邮件地址作为联合点,这样公司 A 就可以将一个工作项分配给 joe@companyb.com,当乔使用该电子邮件地址登录时,他能够看到该工作项完成后可以将其标记为已完成。

所以我目前的想法是使用基于行的 Multi-Tenancy 方法和基于对象的安全性。每个对象都有一组与其相关联的角色(例如管理员、读者、作者),并且这些角色将与用户相关联。然后,我将使用这些来验证每个对象的权限,而不是使用诸如 tenant_id 之类的东西。

这意味着如果有人提供访问权限,任何人都可以访问系统中的任何对象。成为租户实际上只会使您成为权限层次结构根部的管理员(在示例中,这是允许您创建项目实体的公司实体的管理员)。这意味着这不再是一个真正的 Multi-Tenancy 架构......

有没有更好的方法来处理这种情况?

最佳答案

您可以使用用户 - 角色 - 租户类型的映射以及相应表中的 tenantid 列。因此,当 joe@companyb.com 尝试访问 companyA 记录时,您可以检查 companyA 中是否有 joe@companyb.com 的角色提供对 companyA 数据的访问。这样,从长远来看,它会更加安全可靠。

关于mysql - Multi-Tenancy 数据库架构 : Handling case where tenants need to share data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14078118/

相关文章:

mysql - 查询限制不起作用

mysql - SQL——查找参加 2 个或更多类(class)的学生

sql - 插入异常的特异性

mysql - 为类似 Tinder 的应用程序设计高效的 MySQL 数据库

mysql - 如何在 Talend 中动态猜测 Mysqlinput 中的模式

database - 模式之间的 ROWID 值

mysql - 我需要完美的 mysql 查询来获得我想要的结果

php - 将新文件名存储在 mysql 数据库中 verot class.upload.php

java - 如何使用以下详细信息将 java 对象传递给 oracle 存储过程

mysql - 根据MySQL中另一个表的数据自动更新列中字段的数量