我正在努力修复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语句吗?
答案 0 :(得分:1)
您将"$"
作为第二个参数的前缀,何时应该有"?"