开发者社区> 问答> 正文

1.0.29版本在开启WallFilter后,以下Oralce语句无法正常通过

SELECT ?||'ABC' FROM DUAL这条语句在1.0.27上是能通过校验的,但是到了1.0.29上就会报以下异常:

com.alibaba.druid.sql.parser.ParserException: ERROR. token : QUESBAR, pos : 10 at com.alibaba.druid.sql.parser.SQLExprParser.primary(SQLExprParser.java:600) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.dialect.oracle.parser.OracleExprParser.primary(OracleExprParser.java:465) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.parser.SQLExprParser.expr(SQLExprParser.java:85) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.parser.SQLExprParser.parseSelectItem(SQLExprParser.java:2166) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.parser.SQLSelectParser.parseSelectList(SQLSelectParser.java:373) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:267) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.select(OracleSelectParser.java:81) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser.parseStatementList(OracleStatementParser.java:131) ~[druid-1.0.29.jar:1.0.29] at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:79) ~[druid-1.0.29.jar:1.0.29]

我试了一下,加个空格就能通过校验,改为SELECT ? ||'ABC' FROM DUAL,避开了QUESBAR(?|)。

原提问者GitHub用户digitalsonic

展开
收起
山海行 2023-07-05 21:06:59 89 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在使用Druid的WallFilter时,有时候可能会因为防火墙规则过于严格而导致某些SQL语句无法通过。在您的情况下,可能是由于以下原因导致了这个问题:

    WallFilter的防火墙规则过于严格
    WallFilter默认启用了一些防火墙规则,以确保SQL语句的安全性。在某些情况下,这些规则可能过于严格,从而阻止了一些合法的SQL语句通过。您可以尝试调整WallFilter的防火墙规则,以允许这些SQL语句通过。

    例如,在application.properties或application.yml文件中添加以下配置,以允许使用INSERT ALL语句:

    properties
    Copy
    spring.datasource.druid.filters=wall
    spring.datasource.druid.filter.wall.config.insert-into-values-check=false
    在这个配置中,insert-into-values-check参数用于禁用INSERT ALL语句中的值列表检查。

    SQL语句本身不符合规范
    如果SQL语句本身不符合Oracle的规范,可能会被WallFilter拦截。在这种情况下,您需要修改SQL语句,以符合Oracle的规范。

    例如,如果您的SQL语句中使用了Oracle不支持的语法(例如MySQL的语法),您需要将其修改为Oracle支持的语法。

    2023-07-30 10:07:03
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

    2023-07-06 11:54:11
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载