更多信息:在我们的应用程序中,我们需要让用户输入SQL查询,主要是作为应用程序报告系统的一部分.应允许这些SQL查询从数据库中读取他们喜欢的任何内容,但不应允许他们修改任何内容.没有更新,删除插入,表格丢弃,约束删除等.
截至目前,我只测试字符串中的第一个单词是否为“select”,但这太紧凑而且太不安全.
应用程序的“常规”部分仍然可以执行其他操作(插入,更新,删除).只是报告将使用只读用户.
正如Horacio所说,添加“包装”视图也是一个好主意/实践,这些视图只会暴露您想要公开的内容.某种“公共API”.如果您需要更改基础表并且不希望/不能将报告更改为所述表的新定义,这可以为您提供灵活性.然而,这可能被视为许多“额外工作”.