如何确定SQL查询是否为SELECT?

时间:2010-11-20 11:29:13

标签: sql validation select

早上好。

编辑

我想对sql查询进行一些验证,以验证此查询是SELECT,而不是UPDATE或DELETE或INSERT或任何sql奇怪的语句。

我知道最简单的方法是匹配“^ SELECT”但是:

  • 查询可以以“(”

    开头)开头

    (SELECT * FROM blah WHERE id> 1 LIMIT 3)UNION(SELECT * ...)

  • 查询可以“WITH RECURSIVE”开头

    WITH RECURSIVE cte AS(SELECT * FROM blah)

我想确定SQL查询是否是SELECT。 好吧,我不知道在编写正则表达式之前是否有一些奇怪的查询。

感谢任何帮助。

编辑:我想检查一下是否是PURE Select查询:)

3 个答案:

答案 0 :(得分:1)

您还可以在内部运行自己的SELECT更新statemtents以查找要更新的数据,或者将语句嵌入到彼此的许多其他方法...假设您不使用“SELECT”作为数据或字段名称运行/\bselect\b/i的正则表达式,否则你将需要一个完整的解析器。

修改:/\b(insert|update)\b/i将其反转,以确保其中没有任何内容。

答案 1 :(得分:1)

处理此问题的常用方法是使用权限 - 您授予用户在sql server中运行查询db_reader权限,但不授予db_writer或其他任何权限。然后,如果查询失败,则处理错误/异常。

答案 2 :(得分:-1)

如果查询以单词“select”(不区分大小写)开头,那么它就是一个选择查询