powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Подключение к БД от имени пользователя СУБД
14 сообщений из 14, страница 1 из 1
Подключение к БД от имени пользователя СУБД
    #39938938
ALEX.86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.

Разрабатываю REST API для legacy проекта. В проекте используется разграничение прав доступа к данным на уровне СУБД (Postgresql).

В JAVA используется spring boot и jpa. Пул соединений создаётся от имени суперпользователя.

Подскажите пожалуйста, каким образом можно перехватить момент получения соединения из пула, чтобы установить ему имя авторизированного пользователя?
...
Рейтинг: 0 / 0
Подключение к БД от имени пользователя СУБД
    #39938950
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALEX.86
Доброго времени суток.

Разрабатываю REST API для legacy проекта. В проекте используется разграничение прав доступа к данным на уровне СУБД (Postgresql).

В JAVA используется spring boot и jpa. Пул соединений создаётся от имени суперпользователя.

Подскажите пожалуйста, каким образом можно перехватить момент получения соединения из пула, чтобы установить ему имя авторизированного пользователя?


Э-э-э зачем?
Это конечно можно, но тогда на сессию нужно создавать свой пулл соединений для сессии.
Т.е. надо будет перелопачивать кишки Spring-а.
ИМХО проще работать с пулом через суперпользователя, а разграничение делать на уровне сервисов.
...
Рейтинг: 0 / 0
Подключение к БД от имени пользователя СУБД
    #39938960
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALEX.86
В проекте используется разграничение прав доступа к данным на уровне СУБД (Postgresql).
это означает:
1. У вас десктоп проект или интранет проект. То есть юзверей не много.
2. Из п.п. 1 вытекает что пул вам не нужен вообще. Он только тогда, когда юзверей очень много.
3. Значит на каждую сессию свой коннект.
Как в клиент сервере.
...
Рейтинг: 0 / 0
Подключение к БД от имени пользователя СУБД
    #39938965
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALEX.86

Разрабатываю REST API для legacy проекта. В проекте используется разграничение прав доступа к данным на уровне СУБД (Postgresql).

В JAVA используется spring boot и jpa. Пул соединений создаётся от имени суперпользователя.

Подскажите пожалуйста, каким образом можно перехватить момент получения соединения из пула, чтобы установить ему имя авторизированного пользователя?


Пул не поможет.
В целом есть две проблемы:
1. Коннект в java однопоточный, методы синхронизированы.
2. Создание коннекта это долгая операция.

Поэтому если делать так, как от Вас хотят- то надо создавать свой пул, который будет хранить коннекты с привязкой к пользователю, учитывать max_connections (вытеснять самые старые), обновлять коннекты (сервер отстреливает по таймауту) .

Либо переделать систему прав доступа и перенести её в Ваше API
...
Рейтинг: 0 / 0
Подключение к БД от имени пользователя СУБД
    #39938966
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin
надо создавать свой пул, который будет хранить коннекты с привязкой к пользователю
что нонсенс. Так как в пуле коннекты берет любой желающий.
...
Рейтинг: 0 / 0
Подключение к БД от имени пользователя СУБД
    #39938973
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
ALEX.86,

Поищите по словам "postgresql proxy authentication".

ЗЫ. Я смутно помню, что была библиотека (возможно, даже Apache'вская), которая реализовала требуемое Вам. Но, к сожалению, не нашел. Запомнил потому, что один мой приятель реализовал подобное, когда работал на госорганы, там были такие чуднЫе требования.
...
Рейтинг: 0 / 0
Подключение к БД от имени пользователя СУБД
    #39939077
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некоторые jdbc пулы позволяют выполнять дополнительные команды при получении коннекции из пула.
Например, tomcat jdbc pool поддерживает интерсепторы.
https://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html#JDBC_interceptors

Напишите собственный интерсептор, в котором вызовите
set role
https://www.postgresql.org/docs/9.2/sql-set-role.html

Имя пользователя можно получать из thread local переменной, к примеру.
...
Рейтинг: 0 / 0
Подключение к БД от имени пользователя СУБД
    #39939080
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALEX.86
Доброго времени суток.

Разрабатываю REST API для legacy проекта. В проекте используется разграничение прав доступа к данным на уровне СУБД (Postgresql).

В JAVA используется spring boot и jpa. Пул соединений создаётся от имени суперпользователя.

Подскажите пожалуйста, каким образом можно перехватить момент получения соединения из пула, чтобы установить ему имя авторизированного пользователя?

Тебе пул не нужен. По сути старая схема работала как 1 коннекшен к БД == 1 пользователь.
Но поскольку архитектурно пул нельзя выкосить из современных систем системы (он скорее всего глубоко
интегрирован) - то надо создать столько пулов сколько было пользователей.

Программно конечно. Не вручную.

И желательно initial_connections поставить в 0 или 1 и максимум до 2. Нет смысла для каждого
юзера создавать 20 или 30 сеансов.
...
Рейтинг: 0 / 0
Подключение к БД от имени пользователя СУБД
    #39939087
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все зависит от NFR-ов, как всегда.

Сколько конкурентных пользователей, какое максимальное latency на функцию и т.д.
Без этого - проработка архитектуры по кофейной гуще
...
Рейтинг: 0 / 0
Подключение к БД от имени пользователя СУБД
    #39939095
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolchanov,
Да все это на кофейной гуще и велосипедище.
И setrole тоже.
Чудо юдо велосипед делать пул на один коннект. Или на 10 коннектов, но с кодом: "я Вася"
...
Рейтинг: 0 / 0
Подключение к БД от имени пользователя СУБД
    #39939188
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лет 15 назад все двузвенки спокойно создавали DriverManager.getConnection
и не парились. Всё работало.

А на постгресе было коробочное решение пула. Кажется pg-bounсer.
...
Рейтинг: 0 / 0
Подключение к БД от имени пользователя СУБД
    #39939197
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
И счас работает.
Только пул выкидывать, JNDI выкидывать.
И ip адрес писать в переменные самому, а не конфиги аппСервера.
...
Рейтинг: 0 / 0
Подключение к БД от имени пользователя СУБД
    #39939199
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы разучились видеть простые решения.
...
Рейтинг: 0 / 0
Подключение к БД от имени пользователя СУБД
    #39939339
ALEX.86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо. Сделал как советовали выше -> собственный интерсептор и set role
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Подключение к БД от имени пользователя СУБД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]