如何判断sql执行会修改数据库表

有一个文本框和一个按钮,文本框是输入sql语句的地方,点击按钮的时候sql语句执行;
现在想要实现一个功能:要求填入的sql语句只能执行查询操作,若此sql语句会对数据库进行修改则提示不能执行此sql语句,找了好久也没有找到办法实现,特来求助各位大神,使用的是sql server 2008及C#语言开发的

阅读 6.9k
3 个回答

几个思路
0. 终极必杀技,做一个完整的T-SQL Parser,然后你就知道某个特定的SQL语句会不会修改数据库了,但是这个东东还真不简单
1. 设定权限,给执行这些SQL的用户设定只读权限,这样最符合lz的需求,如果你还需要修改就另建一个有写权限的用户。
2. SQL Server中有DDL Trigger和DML Trigger,可以“感知”并“阻止”数据变化,但这两个东西会严重影响性能,不建议乱用。

  1. 粗暴:检查关键字,看有没有修改用的关键字,比如insertupdate等等...特点:简单,误报率高。
  2. 高级:语法分析,检查是否有修改用的语句。特点:精确,复杂。
  3. 常规:正则匹配句式。特点:中庸。

如果是查询操作,只有开头是select的sql才可以吧,可以先把sql语句trim后,split该sql后判断是否为select即可。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题