EntityFramework 6下用户定义的直接SQL查询的安全性

时间:2015-05-29 12:40:19

标签: asp.net-mvc entity-framework asp.net-mvc-5 entity-framework-6 database-security

我需要(重新)为我所使用的应用程序的用户开发一个工具,该工具在ASP.NET 4.5.2 / MVC 5.2.3中并使用实体框架6.

这个工具应该允许授权用户编辑SQL查询,而低权限的用户也可以编辑它们。我担心这样一个工具的安全性,即使Web应用程序只能作为内部网访问。

任何给定的查询只允许是SELECT,并且可以在多个表上拥有JOIN

是否有任何EF6特定的功能允许我检查甚至限制sql字符串只能做一个SELECT
我是否应该在数据库中拥有一个特定用户,只允许SELECT进行<br\s*\/?> 并为这些用户使用单独的连接? 还有什么关于我可能忽略的这种工具的安全性吗?

我知道这个工具是asinine,甚至不应该存在,但我不负责决策,我们计划尽快删除该工具。

1 个答案:

答案 0 :(得分:0)

我有个主意。您可以定义可用的实体和属性以构造此类查询。例如,对于Customer实体,用户可以选择:Name,Surname,Orders.Items.Name,Orders.OrderDate(导航属性)。

用户将参数作为字符串发送到服务器,服务器将参数转换为lambda表达式(使用lambda表达式运行时构造函数),然后将其附加到查询中,如Customers.Select(selectExp).ToList()

这对你有帮助吗?