【问题标题】:Using multiple database schema in a multi tenant application在多租户应用程序中使用多个数据库模式
【发布时间】:2014-01-23 19:08:03
【问题描述】:

我正在将我当前的应用程序迁移到多租户架构。使用单个代码库,我需要处理多个租户。我正在使用单数据库、多模式方法。每个租户都将被分配一个单独的架构,其中元数据保存在默认架构中。

应用程序是用 ASP.NET MVC 构建的。我使用 Dapper 连接到我的 SQL Server。我有 50 多个函数,它们使用直接查询和存储过程调用数据库。是否有任何方法可以在为每个租户初始化 dapper 时设置架构而不更改功能。

【问题讨论】:

    标签: asp.net-mvc architecture dapper multi-tenant


    【解决方案1】:

    我会尝试一个简单的方法。

    使用 Dapper,为了便于维护,我将查询存储在外部 XML 文件中。因此,您可以为每个客户创建一个外部 XML 文件。 另一种解决方案,但我之前没有尝试过,我认为您可以在查询中添加一个作为模式名称的参数。因此,在每个查询中,您总是需要指定架构。

    【讨论】:

    • 我可以在每个函数的查询中动态添加模式名称。为此,我需要编辑现有功能和存储过程。我正在寻找替代方案。每个租户都带有一个模式名称,因此我也不能使用 xml。
    • 如果你有函数和存储过程,你不能从外部注入模式,除非你在函数或存储过程中使用动态查询( EXEC )。但这可能会产生一些安全问题。
    【解决方案2】:

    在 SQL Server 中,架构与用户相关联。每个用户至少有一个默认模式。您可以将租户与架构相关联,这意味着您将拥有

    的映射

    租户 -> 架构 -> 用户

    动态构造您的 SQL 连接字符串并传递与该租户对应的 SQL 用户。这样会自动指出默认架构,您不必更改 Dapper 查询,也不必编写动态查询。

    注意:不要忘记检查连接池的含义。

    【讨论】:

      猜你喜欢
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 2015-12-16
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多