如何使用ASP.NET MVC2和MS SQL Server在共享数据库中实现Tenant View Filter安全模式

Mak*_*jer 3 security saas database-security multi-tenant asp.net-mvc-2

我开始在ASP.NET MVC2中构建一个SaaS业务应用程序,但在开始之前,我想建立一个良好的架构基础.

我将采用共享数据库和共享模式方法,因为数据架构和业务逻辑将非常简单,效率和成本效益是关键问题.

为了确保租户之间良好的数据隔离,我想实现租户视图过滤器安全模式(请看这里).为此,我的应用程序必须根据登录到应用程序的用户模拟不同的租户(DB登录).登录过程需要尽可能简单(它不是企业级软件) - 因此客户只应输入他们的用户名和密码.

用户将通过自己的子域(使用子域路由)访问他们的数据,如http://tenant1.myapp.comhttp://tenant2.myapp.com

满足此方案的最佳方法是什么?

Pet*_*ale 5

我还建议使用两个数据库,一个ConfigDB和一个ContentDB.

ConfigDB包含租户表以及此表中每个租户的Content数据库的主机名,数据库名,sql用户名和sql密码,并通过名为usrAdmin的单独sql用户访问

ContentDB包含所有应用程序表,在用户的SID(或SUSER_ID)上进行分段,并由每个租户sql用户访问,称为usrTenantA,usrTenantB,usrTenantC等.

要检索数据,请以admin身份连接到ConfigDB,检索相应客户端的凭据,使用检索到的凭据连接到服务器,然后查询数据库.

我这样做的原因是横向可扩展性和根据需要隔离客户端的能力.

您现在可以拥有许多ContentDB,可能每10个租户注册您创建一个新数据库,并配置您的应用程序以开始在该数据库中配置客户端.

或者,您可以配置一些sql服务器,在每个服务器上创建一个内容数据库,并让您的代码提供租户历史上服务器的利用率最低.

您也可以在服务器A和B上托管所有常规客户端,但是服务器C可以在他们自己的INDIVIDUAL数据库中拥有租户,所有多租户代码仍然存在,但是这些客户端可以被告知他们现在因为更高的隔离度而更安全.