|
Подключение к БД от имени пользователя СУБД
|
|||
---|---|---|---|
#18+
Доброго времени суток. Разрабатываю REST API для legacy проекта. В проекте используется разграничение прав доступа к данным на уровне СУБД (Postgresql). В JAVA используется spring boot и jpa. Пул соединений создаётся от имени суперпользователя. Подскажите пожалуйста, каким образом можно перехватить момент получения соединения из пула, чтобы установить ему имя авторизированного пользователя? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 22:58 |
|
Подключение к БД от имени пользователя СУБД
|
|||
---|---|---|---|
#18+
ALEX.86 Доброго времени суток. Разрабатываю REST API для legacy проекта. В проекте используется разграничение прав доступа к данным на уровне СУБД (Postgresql). В JAVA используется spring boot и jpa. Пул соединений создаётся от имени суперпользователя. Подскажите пожалуйста, каким образом можно перехватить момент получения соединения из пула, чтобы установить ему имя авторизированного пользователя? Э-э-э зачем? Это конечно можно, но тогда на сессию нужно создавать свой пулл соединений для сессии. Т.е. надо будет перелопачивать кишки Spring-а. ИМХО проще работать с пулом через суперпользователя, а разграничение делать на уровне сервисов. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 04:49 |
|
Подключение к БД от имени пользователя СУБД
|
|||
---|---|---|---|
#18+
ALEX.86 В проекте используется разграничение прав доступа к данным на уровне СУБД (Postgresql). 1. У вас десктоп проект или интранет проект. То есть юзверей не много. 2. Из п.п. 1 вытекает что пул вам не нужен вообще. Он только тогда, когда юзверей очень много. 3. Значит на каждую сессию свой коннект. Как в клиент сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 07:21 |
|
Подключение к БД от имени пользователя СУБД
|
|||
---|---|---|---|
#18+
ALEX.86 Разрабатываю REST API для legacy проекта. В проекте используется разграничение прав доступа к данным на уровне СУБД (Postgresql). В JAVA используется spring boot и jpa. Пул соединений создаётся от имени суперпользователя. Подскажите пожалуйста, каким образом можно перехватить момент получения соединения из пула, чтобы установить ему имя авторизированного пользователя? Пул не поможет. В целом есть две проблемы: 1. Коннект в java однопоточный, методы синхронизированы. 2. Создание коннекта это долгая операция. Поэтому если делать так, как от Вас хотят- то надо создавать свой пул, который будет хранить коннекты с привязкой к пользователю, учитывать max_connections (вытеснять самые старые), обновлять коннекты (сервер отстреливает по таймауту) . Либо переделать систему прав доступа и перенести её в Ваше API ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 07:35 |
|
Подключение к БД от имени пользователя СУБД
|
|||
---|---|---|---|
#18+
Alexey Tomin надо создавать свой пул, который будет хранить коннекты с привязкой к пользователю ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 07:43 |
|
Подключение к БД от имени пользователя СУБД
|
|||
---|---|---|---|
#18+
ALEX.86, Поищите по словам "postgresql proxy authentication". ЗЫ. Я смутно помню, что была библиотека (возможно, даже Apache'вская), которая реализовала требуемое Вам. Но, к сожалению, не нашел. Запомнил потому, что один мой приятель реализовал подобное, когда работал на госорганы, там были такие чуднЫе требования. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 08:45 |
|
Подключение к БД от имени пользователя СУБД
|
|||
---|---|---|---|
#18+
Некоторые 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 переменной, к примеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 13:22 |
|
Подключение к БД от имени пользователя СУБД
|
|||
---|---|---|---|
#18+
ALEX.86 Доброго времени суток. Разрабатываю REST API для legacy проекта. В проекте используется разграничение прав доступа к данным на уровне СУБД (Postgresql). В JAVA используется spring boot и jpa. Пул соединений создаётся от имени суперпользователя. Подскажите пожалуйста, каким образом можно перехватить момент получения соединения из пула, чтобы установить ему имя авторизированного пользователя? Тебе пул не нужен. По сути старая схема работала как 1 коннекшен к БД == 1 пользователь. Но поскольку архитектурно пул нельзя выкосить из современных систем системы (он скорее всего глубоко интегрирован) - то надо создать столько пулов сколько было пользователей. Программно конечно. Не вручную. И желательно initial_connections поставить в 0 или 1 и максимум до 2. Нет смысла для каждого юзера создавать 20 или 30 сеансов. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 13:35 |
|
Подключение к БД от имени пользователя СУБД
|
|||
---|---|---|---|
#18+
Все зависит от NFR-ов, как всегда. Сколько конкурентных пользователей, какое максимальное latency на функцию и т.д. Без этого - проработка архитектуры по кофейной гуще ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 13:46 |
|
Подключение к БД от имени пользователя СУБД
|
|||
---|---|---|---|
#18+
kolchanov, Да все это на кофейной гуще и велосипедище. И setrole тоже. Чудо юдо велосипед делать пул на один коннект. Или на 10 коннектов, но с кодом: "я Вася" ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 13:56 |
|
Подключение к БД от имени пользователя СУБД
|
|||
---|---|---|---|
#18+
Лет 15 назад все двузвенки спокойно создавали DriverManager.getConnection и не парились. Всё работало. А на постгресе было коробочное решение пула. Кажется pg-bounсer. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 16:16 |
|
Подключение к БД от имени пользователя СУБД
|
|||
---|---|---|---|
#18+
mayton, И счас работает. Только пул выкидывать, JNDI выкидывать. И ip адрес писать в переменные самому, а не конфиги аппСервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 16:35 |
|
Подключение к БД от имени пользователя СУБД
|
|||
---|---|---|---|
#18+
Мы разучились видеть простые решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2020, 16:38 |
|
|
start [/forum/topic.php?fid=59&msg=39938960&tid=2120870]: |
0ms |
get settings: |
4ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
32ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
236ms |
get tp. blocked users: |
0ms |
others: | 295ms |
total: | 579ms |
0 / 0 |