Какие минимальные привилегии базы данных требуются spring.jpa.hibernate.ddl-auto = validate? - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь использовать Spring Boot с базой данных Oracle. Во время разработки мы использовали параметр hibernate spring.jpa.hibernate.ddl-auto = validate, но теперь, когда мы движемся к производственному выпуску, мы хотим заблокировать разрешения на подключение. Однако было бы неплохо сохранить проверку работоспособности, обеспечиваемую обработкой запуска проверки гибернации, даже в рабочем выпуске.

К сожалению, когда я пытаюсь сделать это с подключением к базе данных, имеющим достаточные привилегии для запуска Spring Загрузочное приложение, этап проверки гибернации завершается неудачно во время инициализации bean-компонента, поскольку он говорит, что таблицы отсутствуют. Теперь я знаю, что это не так, поэтому я держу пари, что hibernate использует дополнительные запросы для проверки схемы, и что эти запросы требуют дополнительного доступа. Если я установлю значение none, приложение будет работать, но не проверяет совместимость схемы. И если я предоставлю привилегию администратора базы данных для пользователя подключения, и все работает нормально, в том числе проверки. Но я определенно не собираюсь предоставлять этот уровень доступа из приложения в рабочей среде.

Итак, кто-нибудь знает наименьшие привилегии, которые я могу добавить к учетной записи пользователя, чтобы я мог включить проверку гибернации? В идеале я бы просто предоставил SELECT, INSERT, UPDATE и DELETE для таблиц и привилегию CONNECT для учетной записи пользователя, но этого недостаточно для включения проверки.

Я рассмотрел вопрос создания специальной автоматизированной c схемы переменная версии где-то и проверяет это во время выполнения, но это кажется грязным. Если бы я мог найти приемлемую комбинацию привилегий Oracle, которая позволяет выполнить этап проверки без слишком частого открытия соединения, я бы предпочел использовать этот подход.

Я также мог бы определить специальную работу на нашем сервере непрерывной интеграции. так что он временно включает все разрешения базы данных только для одного задания. Но я чувствую, что это подход кувалдой и он не выглядит элегантно.

Любые намеки с благодарностью получены.

Большое спасибо, Джонатан

1 Ответ

0 голосов
/ 10 марта 2020

Упс!

Я отправляю этот ответ на свой вопрос, потому что оказывается, что я допустил ошибку. Из-за хорошо скрытого сообщения об ошибке в моем сценарии SQL я фактически не назначил все базовые разрешения c для таблиц (и других категорий, таких как индексы). Но я не запустил все рабочие процессы в приложении, которые бы показали это. Как только я исправил проблемы с доступом, которые также предоставили достаточный доступ для этапа обработки проверки Hibernate.

Спасибо всем, кто посмотрел на мой вопрос, ответ - убедиться, что вы действительно хотя бы прочитали доступ (привилегия SELECT) ко всему в вашей Oracle схеме. (Hibernate проверяет их все при запуске, поэтому был более строгим, чем мои простые c ручные тесты).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...