准备好的语句执行批处理所需的权限

Posted

技术标签:

【中文标题】准备好的语句执行批处理所需的权限【英文标题】:Privileges Necessary for Prepared Statement Execute Batch 【发布时间】:2018-01-10 12:24:04 【问题描述】:

我有一小段代码使用 PreparedStatement .addBatch() 和 .executeBatch() 方法。

但是,我收到以下异常:

java.sql.BatchUpdateException: ORA-01031: insufficient privileges

at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10500)
at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:230)
blah blah blah

我可以很好地执行大多数 SQL 语句,但不能执行批处理操作。我是否需要授予我的数据库用户特定的权限才能使用这些操作?

编辑

如果我需要除 INSERT/UPDATE 之外的特定权限,我需要哪种权限?

编辑 2

原来我的 DBA 不想给我的帐户所需的权限。感谢大家的帮助。

【问题讨论】:

是的,你需要有权限才能这样做@jason ORA-nnnnn 错误来自数据库,它对 JDBC 或准备好的语句一无所知。试图在数据库中调用的语句是什么? 我明白这一点。我需要知道我需要授予我的数据库用户(而不是应用程序用户)什么权限才能让 PreparedStatement.executeBatch() 工作。 要插入行,您需要INSERT 权限。 【参考方案1】:

我不是 100%,但我认为您不需要任何特权来执行批处理操作。 可能您的 db 用户已经获得了角色 CONNECTION 或至少“CREATE SESSION”权限。 你可以做以下事情

grant all on your_table to your_user;

其中all 表示DELETE, INSERT, REFERENCES, SELECT, TRIGGER, UPDATE。 或仅选择相关权限。

grant  DELETE, INSERT, SELECT,  UPDATE on your_table to your_user.

如果您在查询中使用序列。您还必须授予。

GRANT USAGE ON your_sequence to your_user

如果您在查询中使用任何自定义包或函数。您还必须授予。

GRANT execute ON your_package to your_user

【讨论】:

以上是关于准备好的语句执行批处理所需的权限的主要内容,如果未能解决你的问题,请参考以下文章

Spring之JDBC框架

服务帐户执行批处理数据流作业

DB2 中带有准备好的语句和批处理的“无效数据转换”

MYSQL - 准备好的语句 NULL 处理

为啥要执行权限以及在 c(Linux) 中创建文件所需的写权限? [关闭]

时间复杂度的计算