我正在使用ASP.Net MVC 2和SQL Server数据库实现SaaS应用程序。我正在使用共享租赁方法。
为了过滤数据,到目前为止,我找到了两种方法。
选项1:http://msdn.microsoft.com/en-us/library/aa479086.aspx#mlttntda_tvf
每个租户使用sql登录。因此,使用SUSER_SID()作为视图中的过滤器
选项2:http://blogs.imeta.co.uk/jyoung/archive/2010/03/22/845.aspx
在Context_Info中存储租户ID。因此,使用sql函数从Context_Info中读取租户id作为视图中的过滤器。
你能帮我挑一个合适的选择吗?
由于 感谢
答案 0 :(得分:8)
我认为这归结为安全模型之战。 DBA可能会坚持要你做前者。我更务实,可能会将租户ID传递给我的SP或来自应用层的查询。
我会通过大量的单元测试来支持这一点,以确保一个租户永远不会看到另一个租户数据,我只会将当前租户存储在服务器上的会话或simmilar中,绝不会存储在cookie或URL中,或者可以在客户端被黑客入侵的任何其他地方。
这使得添加新租户变得更加容易,因为不需要DB配置。
当然,会话可能被黑客入侵,因此您需要采取一切预防措施,以确保无论您在服务器上存储租户ID,它都可以免受欺骗等的影响。
答案 1 :(得分:0)
我想补充一点,内联表值函数在构建任何隔离层时也很有用。