开发者社区> 问答> 正文

使用SQL拦截和解析遇见的一些问题

SQL拦截 配置项 : AlterTableAllow 是否允许执行Alter Table语句
Mysql 语句可以过 拦截生效 db2 语法解析未通过TODO pos 58, line 1, column 54, token IDENTIFIER data
SQL语句: alter table audit.SQLHIS alter column EXPLAINMSG set data type VARCHAR(255)

配置项 : ReplaceAllow 是否允许执行REPLACE语句 语法解析通过 拦截不生效 SQL语句: select replace(name,'li','lili') from a.test;

配置项 : SelectWhereAlwayTrueCheck UpdateWhereAlayTrueCheck 拦截WHERE为永真条件 语法解析通过 拦截不生效 SQL语句: select * from A where 1 = 1 ; update audit.USER2 SET TEL='110' WHERE 100=100;

配置项 : SelectUnionCheck 检测SELECT UNION 语法解析通过 拦截不生效 select name from china_employees union select name from usa_employees;

配置项 : SelectMinusCheck 检测SELECT MINUS 语法解析通过 拦截不生效 SQL语句:SELECT Date FROM Store_Information MINUS SELECT Date FROM Internet_Sales;

配置项 : SelectExceptCheck 检测SELECT EXCEPT 语法解析通过 拦截不生效 SQL语句: select * from a except select * form b;

配置项 : SelectIntersectCheck 检测SELECT INTERSECT 语法解析通过 拦截不生效 SQL语句: SELECT Txn_Date FROM Store_Information INTERSECT SELECT Txn_Date FROM Internet_Sales;

配置项 : ConditionDoubleConstAllow 查询条件中是否允许连续两个常量运算表达式 语法解析通过 拦截不生效 SQL语句: SELECT FID = 3 - 1,ID = 3 - 1 from A;

(下列 疑问 具体怎么使用) NoneBaseStatementAllow 是否允许非以上基本语句的其他语句,缺省关闭,通过这个选项就能够屏蔽DDL。 CommitAllow 是否允许执行commit操作 RollbackAllow 是否允许执行roll back操作 ConditionOpBitwseAllow 查询条件中是否允许有'&'、'~'、'|'、'^'运算符。

SQL解析 语句 SQL merge into SQL解析GG MERGE INTO EMPLOYE AS EM USING MANAGER AS MA ON EM.EMPLOYEID=MA.MANAGERID WHEN MATCHED AND EM.SALARY<MA.SALARY THEN UPDATE SET EM.SALARY=MA.SALARY WHEN MATCHED AND EM.SALARY>MA.SALARY THEN SIGNAL SQLSTATE '70001' SET MESSAGE_TEXT = 'EM.SALARY>MA.SALARY' WHEN NOT MATCHED THEN INSERT VALUES (MA.MANAGERID,MA.NAME,MA.SALARY) ELSE IGNORE;

语句 SQL limit SQL解析GG select * from Customer LIMIT 10;

操作步骤是先进行SQL解析,解析成功走拦截,如果失败则停止,现在主要做的是mysql和DB2的语法解析和拦截,

原提问者GitHub用户kai23333

展开
收起
山海行 2023-07-05 19:55:13 107 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    以下是一些常见的问题及其解决方法:

    拦截不到SQL语句:如果您的SQL拦截器没有拦截到SQL语句,可能是因为您的拦截器没有正确配置或者没有注册到数据库连接池中。请确保您的拦截器已经正确配置,并且已经注册到数据库连接池中。

    解析失败:如果您的SQL解析器无法解析SQL语句,可能是因为SQL语句存在语法错误或者不支持的语法。请仔细检查SQL语句,并确保它符合SQL语法规范。

    性能问题:如果您的SQL拦截和解析操作对系统性能产生了负面影响,可能是因为您的操作太过频繁或者复杂。请尝试优化您的SQL拦截和解析操作,例如缓存已经解析的SQL语句,避免重复解析等。

    安全问题:如果您的SQL拦截和解析操作可能会暴露敏感信息或者存在SQL注入等安全问题,可能会对系统造成严重的影响。请确保您的SQL拦截和解析操作是安全的,并且不会对系统造成任何安全风险。

    兼容性问题:如果您的SQL拦截和解析操作在不同的数据库环境中表现不一致,可能是因为不同的数据库实现了不同的SQL语法和解析规则。请确保您的SQL拦截和解析操作是兼容的,并且能够在不同的数据库环境中正常运行。

    2023-07-30 15:06:38
    赞同 展开评论 打赏
  • if (Boolean.TRUE == getConditionValue(visitor, where, config.isDeleteWhereAlwayTrueCheck())) { if (config.isDeleteWhereAlwayTrueCheck() && visitor.isSqlEndOfComment() && !isSimpleConstExpr(where)) { addViolation();}}

    跟踪了源码com.alibaba.druid.wall.spi.WallVisitorUtils#checkDelete 主要是这句 第一个判断条件已经成立 然而第二个判断条件 中第二个条件(判断sql是否以注释结尾)还有第三个条件(判断where条件时候为简单常量语句)为false 不知道为何要做如此的判断 com.alibaba.druid.wall.spi.WallVisitorUtils#checkUpdate 也有类似的判断

    原回答者GitHub用户chinaerserver

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

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像