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

标签 java sqlite jdbc

我的服务器应用程序几乎在所有情况下都使用准备好的语句,以防止 sql 注入(inject)。尽管如此,还是需要提供特殊用户执行原始 SELECT 查询的可能性。

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

非常感谢!

最佳答案

JDBC 通过调用 Connection.setReadOnly(true) 支持只读连接.然而 javadoc 说:

Puts this connection in read-only mode as a hint to the driver to enable database optimizations.

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

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

关于Java jdbc - 如何执行严格只读的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33214975/

相关文章:

sql - 在SQlite中使用大于运算符时,将返回空白值

perl - DBD::SQLite 插入多行最快的方法

java - 无法从 Java 将文本添加到 mysql 表

java - 在 Java 中循环

java - 将 Glassfish 服务器添加到 Eclipse Luna

java - 如何使用 AspectJ 过滤方法的返回值?

java - object.recycle 的问题以及何时执行

r - 使用 RSQLite 在 R 中连接 2 个以上的表

java - mysql 结果未使用 java applet 正确写入文件

java - 通过 Java 代码将 continueOnError 属性设置为 true