我建立了一个查询编辑器,用户可以在其中输入查询。但是,它需要将用户的输入限制为1000个结果,否则用户可以输入:
SELECT * FROM mybigtable
它可以尝试下载10亿个结果。
实施限制的最佳方法是什么?我想到的第一种方法是:
SELECT * FROM (
user-query
) x LIMIT 1000
但是,这将在执行实际限制之前执行整个查询(并且可能要花很长时间)。对用户的sql输入实施严格限制的最佳方法是什么?
答案 0 :(得分:1)
这个评论太长了。
我认为没有通用的解决方案。
在SELECT * FROM ... LIMIT 1000
语句中包装用户查询很有吸引力,但是;
WITH
子句)第二种用例的典型解决方案是根据自动递增的整数列(通常是表的主键)过滤行。但这使得通用变得更加困难。
简而言之:远距离操作SQL是很棘手的:如果您想要针对用例的完整解决方案,请给自己一个真正的查询生成器(或至少一个SQL解析器)。