@Dannerty

Как настроить политику защиты строк в PostgreSQL?

Здравствуйте. Подскажите, можно ли реализовать защиту строк в таблицах в моем случае?

Есть продуктивный сервер, в котором есть таблица настроек, в этой таблице хранятся настройки всех доп.серверов, с указанием UUID сервера в поле "Server".
Также есть схемы-серверы для каждого из серверов, в которых есть такая же таблица настроек, но в ней хранятся настройки только конкретного сервера.
User-mapping настроен на одну учетную запись для всех серверов.
Хотелось бы каким-то образом ограничить изменение строк из базы серверов в продуктивной базе, не относящихся к конкретному серверу.

Что-то типа
CREATE POLICY security_ros ON settings_table
  USING (server = (select server from settings_table group by server))


Этот вариант не работает, т.к. судя по всему условие выполняется на продуктивном сервере, а там возвращает больше одной строки.
Можно ли настроить подобную политику, но чтобы использовались таблицы отдельных серверов?

В идеале это должно выглядеть так, ну как мне представляется:
1. На продуктивном сервере в таблице 'settings_table' хранятся настройки всех остальных серверов, в поле 'server' указаны uuid всех остальных.
2. На сервере 'server_1' в таблице 'settings_table' находятся только настройки, относящиеся к данному серверу, т.е. в поле 'server' только один uuid, других нет.
3. Сервер 'server_1' делает обновление своих настроек у себя в базе и продуктивной:
update settings_table set value = 1 where parameter = 'pararmeter'
update product_server.settings_table set value = 1 where parameter = 'parameter'

4. При выполнении запроса на обновление настройки на продуктивном сервере должен сработать фильтр, который использует uuid из таблицы сервера 'server_1', т.к. там он уникален, и позволит изменить настройку только ту, которая относится к данному uuid, не изменяя остальных с таким же именем поля 'parameter'.
По аналогии с подобным запросом:
update product_server.settings_table set value = 1 where parameter = 'parameter' and server = 'uuid_server'

Это необходимо для того, чтоб с каждого отдельного сервера можно было просмотреть или изменить настройки в базе продуктивного сервера только те, которые относятся к нему.
  • Вопрос задан
  • 187 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы