-
Notifications
You must be signed in to change notification settings - Fork 8.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fixed bug:mysql,delete from tableName where id =1,如果把where关键字写错了,如写成d… #1006
Conversation
…elete from tableName wher id =1,会导致整个表的数据被删除。update语句也有同样问题
感觉这个不是bug |
遇到过几次druid解析出来没报错,实际丢掉了部分条件。 |
如果这都不是bug,那世界上还有什么是bug?一句写错的sql导致把表内所有内容都删了还不是bug? |
程序本身就需要健壮性,防sql注入等 |
这个不是用的数据源部分,是用的druid的sql解析部分,错误的sql解析不报错这个难道不是bug |
如果用了druid和不用druid,结果不一样,我觉得是druid的Bug。 btw:那样的语句明显语法错误,mysql能直接执行不报错? |
这种语句数据库本身会抛错吧 ? |
怎么使用parser的? |
这个用的场景是数据库中间件里用来解析sql |
druid parser作为mycat的解析器,如果遇到这种错误的语句,发往后端数据库实例将会直接删除掉整个表的数据,确实在druid parser的处理里面应该要识别出这种sql语法错误,上面的语句实际上将错写的where当成了表别名,然后druid parser将后面的条件直接过滤掉 |
这种SQL在mysql中执行会报错的呀。怎么会执行成功呢? |
会导致全表更新, 这样的sql语句应该要被拦截的, 配置 deleteWhereNoneCheck=true, updateWhereNoneCheck=true, 危险SQL是不允许执行的 |
这是什么数据库?mysql不会执行这种错误的执行语句。是druid parser将后面的条件直接过滤掉 导致的错误吧? |
修复了吗?好慌啊 |
|
…elete from tableName wher id =1,会导致整个表的数据被删除。update语句也有同样问题
对应的issue:#974