将createNativeQuery与GRANT语句一起使用

时间:2015-05-21 14:38:29

标签: sql jpa grant

我正在努力修复HP Fortify发现的一些代码结果。

尝试修复执行GRANT语句的现有查询语句

原始代码:

Query grantQuery = entityManager.createNativeQuery("GRANT INSERT ON TABLE " + data + " TO " + username);
grantQuery.executeUpdate();

变量数据只是传递给此持久性类文件的字符串。变量username是持久性类文件的私有静态最终字符串。还知道这个用户名属性文件是从本地配置文件中提取的。

Fortify建议使用预准备语句而不是字符串连接。

我在grantQuery上玩setParameters,但我只是在运行时遇到错误。

使用setParameters的修改代码:

Query grantQuery = entityManager.createNativeQuery("GRANT INSERT ON TABLE ?1 TO $2");
grantQuery.setParameter(1, data);
grantQuery.setParameter(2, username);
grantQuery.executeUpdate();

错误: 异常后回滚事务。 java.lang.IllegalArgumentException:org.hibernate.QueryParameterException:找不到命名参数[2]

我的语法错误使用setParameters错了吗?我应该使用其他方法来执行GRANT语句吗?

1 个答案:

答案 0 :(得分:1)

您将"$"作为第二个参数的前缀,何时应该有"?"