在多租户数据架构中,实现租户过滤视图的最佳方式是什么?
我正在使用 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
将租户 ID 存储在 Context_Info 中。因此,使用从 Context_Info 读取租户 id 的 sql 函数作为视图中的过滤器。
您能帮我选择合适的选项吗?
谢谢 谢谢
I am implementing a SaaS application using ASP.Net MVC 2 and SQL Server database. I am using Shared Tenancy approach.
To filter data, so far I have found 2 approaches.
Option 1: http://msdn.microsoft.com/en-us/library/aa479086.aspx#mlttntda_tvf
Using sql login per tenant. Thus, using SUSER_SID() as a filter in the views
Option 2: http://blogs.imeta.co.uk/jyoung/archive/2010/03/22/845.aspx
Storing tenant id in the Context_Info. Thus, using a sql function that reads tenant id from the Context_Info as a filter in the views.
Can you please help me pick the appropriate option?
Thanks
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为这归结为安全模型之战。 DBA 可能会坚持要求您选择前者。更务实的是,我可能会将租户 ID 传递到我的 SP 或从应用程序层进行查询。
我会用大量的单元测试来支持这一点,以确保一个租户永远看不到另一个租户的数据,并且我只会将当前租户以会话或类似方式存储在服务器上,而不会存储在 cookie 或 URL 或其他任何地方可以在客户端上被黑客攻击。
这使得添加新租户变得更加容易,因为不需要数据库配置。
当然,会话可能会被黑客攻击,因此您需要采取一切预防措施,以确保无论您如何在服务器上存储租户 ID,它都不会受到欺骗等。
I think this comes down to a battle of security models. A DBA may insist you do the former. I, being more pragmatic, would likely pass the tenant ID into my SPs or queries from the application layer.
I would back this up with a whole lot of unit tests that ensure one tenant can never see another tenants data, and I would only store the current tenant on the server in session or simmilar, never in a cookie or in URLs, or anywhere else that can be hacked on the client.
This makes it much easier to add new tenants, as there is no DB config required.
Of course, sessions can be hacked, so you need to take all precautions to ensure that however you store tenant ID on the server, it is immune from spoofs, etc.
我想补充一点,内联表值函数在构建任何隔离层时也很有用。
I would add that inline table-valued functions can also be useful in building any isolation layers.