Java jdbc - 如何执行严格只读的语句

Sal*_*inD 2 java sqlite jdbc

我的服务器应用程序几乎在所有情况下都使用准备好的语句来防止 sql 注入。然而,需要提供执行原始 SELECT 查询的特殊用户的可能性。

我如何或多或少地安全地确保查询不会修改数据库?是否可以执行只读查询,或者是否有任何其他“安全”方式确保没有人尝试任何 sql 注入?(使用sqlite3,所以我不能使用任何权限)

非常感谢!

And*_*eas 6

JDBC 通过调用 来支持只读连接Connection.setReadOnly(true)。但是 javadoc 说:

将此连接置于只读模式,作为对驱动程序启用数据库优化提示

一些JDBC 驱动程序将强制执行只读请求,其他驱动程序将仅将其用于优化,或者干脆忽略它。我不知道sqlite3它是如何实现的。你必须对此进行测试。

否则,您可以对 SQL 语句进行“简单”解析,以确保它是单个有效SELECT语句。