Используйте 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не беспокоясь о таблице реального местоположения.

Другие вопросы по тегам