Используйте Hibernate для доступа к таблице Oracle DBLink
Мой пользователь хочет ввести случайный SQL для доступа к базам данных, для которых существует ссылка на БД в Oracle
дб. Тем не менее, это дает исключение с Hibernate
, Ниже приведена функция, которая должна проверять, является ли запрос действительным, запустив запрос. Любая рекомендация приветствуется.
Исключение составляет:
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query 'Select ID,NAME from YYY@XXX_DB_LINK'
Вот код:
public String testSQL(String sqlQuery) {
if(!checkAllowedSQL(sqlQuery)) {
logger.debug("Forbidden SQL Query detected: " + sqlQuery);
return "Forbidden SQL Query detected '" + sqlQuery + "'";
}
try {
Query query = entityManager.createNativeQuery(sqlQuery);
List<Object[]> list = query.getResultList();
} catch(Exception e) {
return e.toString() + " '" + sqlQuery + "'";
}
return null;
}
1 ответ
Решение
Вы должны создать SYNONYM
для вашей связанной таблицы YYY@XXX_DB_LINK
тогда ваш пользователь может отправить собственный запрос, например Select ID,NAME from YYY
не беспокоясь о таблице реального местоположения.