Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / Подключение к БД от имени пользователя СУБД / 14 сообщений из 14, страница 1 из 1
18.03.2020, 22:58
    #39938938
ALEX.86
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД от имени пользователя СУБД
Доброго времени суток.

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

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

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

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

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

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


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

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

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

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


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

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

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

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

ЗЫ. Я смутно помню, что была библиотека (возможно, даже Apache'вская), которая реализовала требуемое Вам. Но, к сожалению, не нашел. Запомнил потому, что один мой приятель реализовал подобное, когда работал на госорганы, там были такие чуднЫе требования.
...
Рейтинг: 0 / 0
19.03.2020, 13:22
    #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
19.03.2020, 13:35
    #39939080
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к БД от имени пользователя СУБД
ALEX.86
Доброго времени суток.

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

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

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

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

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

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

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

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


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