我有一个自定义脚本引擎,允许用户在TSQL数据集上执行查询。查询是自由格式,并直接映射到'System.Data.Linq.DataContext.ExecuteQuery'的调用
我希望用户能够查询数据并返回结果,但不要修改数据,因为这会带来安全问题。
目前我检查字符串是否包含以下关键字:insert,update,alter,create,delete,drop,truncate,merge和exec。
但是,我怀疑有更好的方法,比如将上下文设置为只读或其他一些不依赖于我记忆或解析所有可能的sql语句的方法等。
答案 0 :(得分:4)
如何使用仅具有数据读取器权限的用户连接数据库?这将完全消除问题并实现开箱即用的体面错误报告。检查单词的SQL字符串最多似乎是粗略的,例如,用户可以执行SELECT ... INTO
,这是您之前提到的关键字无法处理的。