sql-server - 在 Multi-Tenancy 数据架构中,实现租户过滤 View 的最佳方式是什么?

标签 sql-server asp.net-mvc-2 saas multi-tenant

我正在使用 ASP.Net MVC 2 和 SQL Server 数据库实现一个 SaaS 应用程序。我正在使用共享租赁方法。

要过滤数据,目前我找到了两种方法。

选项 1:http://msdn.microsoft.com/en-us/library/aa479086.aspx#mlttntda_tvf

对每个租户使用 sql 登录。因此,在 View 中使用 SUSER_SID() 作为过滤器

选项 2:http://blogs.imeta.co.uk/jyoung/archive/2010/03/22/845.aspx

在 Context_Info 中存储租户 ID。因此,使用从 Context_Info 中读取租户 ID 的 sql 函数作为 View 中的过滤器。

您能帮我选择合适的选项吗?

谢谢 谢谢

最佳答案

我认为这可以归结为安全模型之战。 DBA 可能会坚持你做前者。我比较务实,可能会将租户 ID 传递给我的 SP 或来自应用层的查询。

我会通过大量单元测试来支持这一点,以确保一个租户永远不会看到另一个租户的数据,并且我只会将当前租户存储在 session 或类似的服务器上,而不是存储在 cookie 或 URL 中,或任何其他可以在客户端被黑的地方。

这使得添加新租户变得更加容易,因为不需要数据库配置。

当然, session 可能会被黑客入侵,因此您需要采取一切预防措施,以确保无论您在服务器上存储租户 ID,它都不会受到欺骗等的影响。

关于sql-server - 在 Multi-Tenancy 数据架构中,实现租户过滤 View 的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3460501/

相关文章:

sql-server - 随时随地将 sql 查询结果导出到 excel 文件

将 nvarchar 转换为 int 的 SQL 查询

asp.net-mvc-2 - 如何覆盖 ActionLink 行为

sql - 如何在数据库项目中打印 SQLCMD 变量?

sql - 更新触发器仅在数据更改时更新

visual-studio-2010 - 在 Visual Studio 2010 中构建期间有条件地嵌入 ASP.NET MVC2 View 作为资源

asp.net - jqGrid ASP.NET MVC2 数据绑定(bind) NullReferenceException

database - 对于中型 SaaS CRM,我应该使用哪个数据库?

saas - Saas 和 API 有什么区别。 (SaaS 与 API)

Java SaaS 架构 - 可扩展性