在不使用字符串连接的情况下使用动态模式进行查询

Query with dynamic schema without using string concatenation

我有一个使用 Oracle 数据库的系统,其模式与应用程序用户不同。模式名称本身是事先不知道的,所以我们不能只是硬编码。这是一个系统 属性.

大部分数据访问是通过 Hibernate 进行的,它可以在连接时指定默认架构,因此在这些情况下这不是问题。

但是,有几个地方使用普通 SQL 查询(使用 spring jdbc 模板)。所以现在我们可以归结为:

Map<String,Object> result = jdbcTemplate.queryForMap("SELECT A, B, C FROM "+schema+".TABLE WHERE blablablah");

当然,这是一个开放的 SQL 注入漏洞。我们正在计划安全审计,这肯定会被标记出来。

所以问题是:如何在查询中指定模式,是使用 jdbcTemplate、另一个 Sprint 数据访问实用程序,还是普通的 jdbc?

谢谢, JGN

您可以使用 Connection.setSchema 指定 JDBC 连接的架构。这应该在您创建执行 SQL 命令的语句之前完成。