我需要(重新)为我所使用的应用程序的用户开发一个工具,该工具在ASP.NET 4.5.2 / MVC 5.2.3中并使用实体框架6.
这个工具应该允许授权用户编辑SQL查询,而低权限的用户也可以编辑它们。我担心这样一个工具的安全性,即使Web应用程序只能作为内部网访问。
任何给定的查询只允许是SELECT
,并且可以在多个表上拥有JOIN
。
是否有任何EF6特定的功能允许我检查甚至限制sql字符串只能做一个SELECT
?
我是否应该在数据库中拥有一个特定用户,只允许SELECT
进行<br\s*\/?>
并为这些用户使用单独的连接?
还有什么关于我可能忽略的这种工具的安全性吗?
我知道这个工具是asinine,甚至不应该存在,但我不负责决策,我们计划尽快删除该工具。
答案 0 :(得分:0)
我有个主意。您可以定义可用的实体和属性以构造此类查询。例如,对于Customer实体,用户可以选择:Name,Surname,Orders.Items.Name,Orders.OrderDate(导航属性)。
用户将参数作为字符串发送到服务器,服务器将参数转换为lambda表达式(使用lambda表达式运行时构造函数),然后将其附加到查询中,如Customers.Select(selectExp).ToList()
这对你有帮助吗?