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

Asp.net mvc EntityFramework 6下用户定义的直接SQL查询的安全性,asp.net-mvc,entity-framework,asp.net-mvc-5,entity-framework-6,database-security,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,Entity Framework 6,Database Security,我需要(重新)为我工作的应用程序的用户开发一个工具,它位于ASP.NET 4.5.2/MVC 5.2.3中,使用Entity Framework 6 该工具应该允许授权用户编辑SQL查询,并允许较低权限的用户运行SQL查询。我担心这样一个工具的安全性,即使web应用程序只能作为intranet访问 任何给定的查询只允许是一个SELECT,并且可以在多个表上具有JOINs 是否有任何特定于EF6的函数允许我检查甚至限制sql字符串只执行一个SELECT? 我是否应该在数据库中有一个特定的用户,该用

我需要(重新)为我工作的应用程序的用户开发一个工具,它位于ASP.NET 4.5.2/MVC 5.2.3中,使用Entity Framework 6

该工具应该允许授权用户编辑SQL查询,并允许较低权限的用户运行SQL查询。我担心这样一个工具的安全性,即使web应用程序只能作为intranet访问

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

是否有任何特定于EF6的函数允许我检查甚至限制sql字符串只执行一个
SELECT

我是否应该在数据库中有一个特定的用户,该用户只允许执行
SELECT
s并作为该用户为这些查询使用单独的连接?
对于这种工具的安全性,还有什么我可能忽略的吗


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

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

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


这对您有帮助吗?

我当然会限制用户在数据库级别只读。不管怎么说,这都是很好的管理!不幸的是,不是真的。这几乎就是我们对该工具未来的想法,能够选择实体、连接实体以及这些实体的属性;所有这些都是一个图形化、简单且漂亮的web gui。主要的问题是,业务人员的需求没有固定,没有很好的定义,并且经常发生变化,我们没有太多的时间花在这个经过深思熟虑的工具上。我们唯一能负担得起的就是来自用户的可怕的直接查询,我希望它尽可能安全。只要你把用户帐户锁定为只读,你就可以了。您可以始终在字符串中搜索关键字,这些关键字被限制为一种安全保护,尽管您已经知道注入是一个问题,但似乎您没有太多选择!我同意@nik0lias的说法,您可以在最终查询中搜索被拒绝的sql指令,但它永远不会安全,因为您无法想象所有可能的命令。在我看来,将用户帐户锁定为只读是一个不错的选择