【问题标题】:Multi tenancy confusion多租户混淆
【发布时间】:2024-01-18 08:04:01
【问题描述】:

我已经使用 MultiTenantConnectionProviderCurrentTenantIdentifierResolver 配置了休眠多租户。我还编写了一个过滤器,它拦截 url 并决定谁是租户。

我有几个问题/困惑。

  1. 这种设计意味着每个url都必须携带租户ID(可能是域/子域的形式),对吧?如果它不带它怎么办?如何处理这种极端情况?

  2. 这种方法合适吗?我还考虑过在用户会话中存储租户 ID,但我认为这不是一个好主意。 (过去我在会话中存储某些内容时遇到过问题,并且它在某些情况下有其局限性)。

    我对这两种方法感到困惑,请问有没有第三种方法。我选择了SCHEMA hibernate 多租户策略。

【问题讨论】:

    标签: java spring hibernate multi-tenant


    【解决方案1】:

    实现多租户设计的最佳方法是在每个事务表中都有 Tenant_ID,并在一个主表中存储租户信息。

    对于每个请求,我们都需要发送tenant_id。 如果您有默认租户要求,如果没有tenant_id 来插入数据,您可以实现该行为。 您不能在另一个租户中插入一个租户数据,因此 tenant_id 是强制性的,并且应该对 Tenant_ID 进行适当的验证。

    【讨论】:

    • 你的意思是说我应该在每个表中将tenantID作为单独的列?
    • 是的,如果没有 Tenant_id,您将无法区分哪些行数据属于哪个租户。我希望这会有所帮助。
    • 实现多租户有多种策略,你指定的一个,还有两个,1.是基于Schema的每个租户的单独架构和2.每个租户的单独数据库,我使用的是基于 SCHEMA 的策略。