PostgreSQL: тот же пользователь должен иметь разные роли в отношении базы данных, но роли/привилегии применяются во всемJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 PostgreSQL: тот же пользователь должен иметь разные роли в отношении базы данных, но роли/привилегии применяются во всем

Сообщение Anonymous »

среда/архитектура
dbc-server (Frontend, интеграция KeyCloak)-создает/обновляет пользователей, назначает роли высокого уровня, отправляет события через Rabbitmq. Подключите, прекращайте сеансы и т. Д.
Postgresql Одиночный кластер (многие базы данных: hazna, click, ...).
Цель: единственный логический пользователь (KeyCloak имени пользователя) может присутствовать/использоваться в нескольких базах данных, но должен иметь различные привилегии для DataBase. Пример: в базе данных HAZNA пользователь должен быть владельцем (полные привилегии по этому DB/Schema), в то время как в базе данных клика одним и тем же пользователем должен быть Project_cru (без удаления).
Сводка задачи
Postgres Роли являются кластерами-глобальными. Я использовал глобальные роли (например, Project_owner, Project_cru). Я также предоставил привилегии по публичной схеме (по умолчанию) или по нескольким схемам. В результате, когда я назначаю Project_owner пользователю (или грант Project_owner Privileges на публике), этот пользователь эффективно становится владельцем в других базах данных-даже когда я явно не намеревался, чтобы для этих баз данных. Ожидайте
alice предоставлена ​​hazna_owner (или project_owner только для hazna) ⇒ полные привилегии только в hazna.
alice предоставлен Clic Db.
Что на самом деле происходит
Использование глобальной ролевой проекты_ундер + предоставление этой ролевой привилегии на общественных (или на нескольких DB/схеме) заставляет Алису действовать как владелец и в других DBS. Роли/привилегии, по-видимому, являются «глобальными» с точки зрения приложения, поэтому DB-специфическая изоляция теряется.
Соответствующий код Java (агент)
Я прикрепляю точный метод, который выполняет Create/Enectable/Disable/Password Sync-вот где Grants/Revokes выполняются:
root (my-nection). /> PostgreSQL Роли являются кластерными глобальными. Грантовая роль пользователю-это картирование в кластере. Привилегии предоставляются на объектах (схема/таблицы) внутри каждой базы данных. Если вы предоставили Project_Owner Privileges на публике во многих DBS, а Алиса предоставлена ​​Project_Owner, у нее будут эти привилегии повсюду, где существуют эти гранты схемы. Я попытался добавить фильтрацию current_database (), но это не работает для ролевого членства. < /P>
Что я попробовал /считал < /p>
Роли префикса на базу данных (например, hazna_owner, click_owner)-работает, но создает много ролей и управления. Схемы click_data, назначить привилегии глобальным ролям на схему) - работает только в том случае, если я не предоставляю привилегии общественности. Если я непреднамеренно предоставлен на публике, утечка привилегий. Это централизует картирование, но требует дополнительного хранилища данных и логики синхронизации. DB B)-Каков рекомендуемый, безопасный подход с производством с наименее оперативной болью? Держите таблицу отображения и позвольте агенту запустить грант/отображение на отображение? Пример надежного SQL -запроса, чтобы получить роли, которые имеют привилегии в данной схеме/базе данных? (Я думал, что has_schema_privilege (C.RolName ,: Schema_Name, 'Использование') или HAS_TABLE_PRIVILEGE, является ли это правильным/заслуживающим доверия?) Создание и гранты (сценарии /схема миграции), чтобы избежать ручных ошибок? has_schema_privilege) для реализации рекомендуемого подхода.
ловушки, чтобы избежать (публичные схемы, привилегии по умолчанию, именование ролей, риски безопасности).

Подробнее здесь: https://stackoverflow.com/questions/797 ... s-privileg
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»