2016-07-07 76 views
0

我正在开发Web服务,该服务将为具有相同数据结构的单独组织提供服务。我正在寻找更安全的方式来保持许多组织的数据分开并避免insecure direct object references实体框架中的用户/组织上下文限制

我可以在接下来的方式实现:每个DB查询

  1. 通行证用户ID信息(得到这个用户,检查请求的资源与某些组织等的组织)。

  2. 为每个组织创建单独的数据库实例,并在会话初始化期间提供特定组织的连接字符串。

第一种方式看起来有点无聊,需要额外关注每个请求。很容易错过验证,一些用户可以通过在自己的请求中传递随机ID来探索其他组织的数据。

第二种方式消除了关于额外过滤的所有问题。但我打算使用云数据库,每个新实例都需要额外付款,所以我想避免这种情况。

是否有可能以其他方式维护实体框架上下文?

+0

将组织ID作为分区键存储您的记录。所以你可以用它来分类组织。 – Aravind

+1

根据您使用的SQL Server版本,查看行级安全性https://msdn.microsoft.com/en-us/library/dn765131.aspx,特别是使用EF的示例https://azure.microsoft.com/ en-us/documentation/articles/web-sites-dotnet-entity-framework-row-level-security/ – Macilquham

+0

@Macilquham你的评论是我的问题的答案。 RLS是我的项目的解决方案。 – RredCat

回答

0

在这个问题上不能明确地回答。您需要考虑许多因素,例如未来数据量,数据隐私级别,组织代表是否需要访问数据库,记住设计中的错误风险等。值得考虑的组织数量。如果少数组织例如3-5个,有时将数据放置在单独的数据库中是有意义的。 Azure允许您在没有任何问题的情况下执行此操作,至少您不需要支付数据库的数量。如果有许多组织和您的应用程序会有这种类型的SaaS,我会想,将数据放在单个数据库中。这种实现不是很复杂。