【发布时间】:2014-02-25 16:05:40
【问题描述】:
我希望能够在客户端生成查询,然后将它们发送到服务器。为了仍然具有安全性,这是我的方法:
每个客户都与一个帐户相关联。因此,客户端必须向服务器发送帐户 ID 和查询。
然后服务器将接收帐户 ID 和查询。 服务器随后将对与该帐户相关的所有表和行进行连接。
一旦服务器将与该帐户相关的所有记录作为连接语句。然后它将执行客户端发送的查询,并将针对连接而不是整个数据库执行该查询。
所以我的问题是如何将 linq 查询发送到服务器?例如,我希望客户端发送:
// Id of Account QUERY
object[]{ "AfKX-3451-X4hT-...", myContext.Customers.Where(x=>x.Age>18) }
第二个参数是 IQueryable 类型,因此我不能序列化它:(
如果恶意用户反编译客户端应用程序并更改查询,那么他只会影响他的帐户,而不是整个数据库。
【问题讨论】:
-
您是否要在本地拥有 EF 模型的副本?
-
这听起来像是个坏主意。不仅因为 anyone 可以反编译应用程序,而且主要是因为它将所有业务逻辑拉入客户端。当客户端只能获取或保存细粒度数据时,几乎没有任何服务器/服务端业务逻辑。但无论如何,看起来 OData 将是实现这一目标的更好选择(取决于您正在谈论的应用程序类型)。此外,如果这是关于多租户的,在 EF 中有更好的方法来处理它(例如,每个租户的模式)。