powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Возможно ли обновлять строки, защищенные Row Level Security, не будучи superuser?
3 сообщений из 3, страница 1 из 1
Возможно ли обновлять строки, защищенные Row Level Security, не будучи superuser?
    #40096919
Denis Yakovenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я пытаюсь обновлять значения в таблице, строки которой защищены политиками row level security (делать soft delete).
Однако, при обновлении получаю ошибку: Query Statusnew row violates row-level security policy for table "my_table".

По сути, мне нужно производить удаление строк (soft delete) путем обновления поля deleted . И при этом мне нужно, чтобы current_user (который еще и owner таблицы, но не superuser) не видел строки, у которых флаг deleted установлен в true .

Вот, как я задаю row level security:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
alter table my_table enable row level security;
alter table my_table force row level security;

create policy select_policy on my_table for select to public using (deleted is false);
create policy insert_policy on my_table for insert to public with check (true);
create policy delete_policy on my_table for delete to public using (true);
create policy update_policy on my_table for update to public using (true) with check (true);


И вот так пытаюсь обновить строку:
Код: plsql
1.
update my_table set deleted = true where id = 1;


__________

Возможно ли это вообще реализовать? Если да, то что я делаю не так и что нужно исправить?
...
Рейтинг: 0 / 0
Возможно ли обновлять строки, защищенные Row Level Security, не будучи superuser?
    #40096939
grgdvo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis Yakovenko,

дока

Typically an UPDATE command also needs to read data from columns in the relation being updated (e.g., in a WHERE clause or a RETURNING clause, or in an expression on the right hand side of the SET clause ). In this case, SELECT rights are also required on the relation being updated, and the appropriate SELECT or ALL policies will be applied in addition to the UPDATE policies. Thus the user must have access to the row(s) being updated through a SELECT or ALL policy in addition to being granted permission to update the row(s) via an UPDATE or ALL policy.

Скорее всего Вам нужно как-то пересмотреть ваши роли и ввести роль, которой будет разрешено видеть и менять все данные.
Потому что select_only to public перекрывает вам всякий доступ к deleted=true
Либо ввести роль, которая будет видеть только не удаленные данные.

А вообще, задача видимости данных не решается через RLS. Так в принципе неправильно делать.
Заведите отдельную табличку для удаленных данных. И переносите туда.
Введите регламентные процедуры как восстанавливать удаленные данные, если такое требуется.
...
Рейтинг: 0 / 0
Возможно ли обновлять строки, защищенные Row Level Security, не будучи superuser?
    #40096941
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там, вроде, ещё и с pg_dump грабли могут быть.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Возможно ли обновлять строки, защищенные Row Level Security, не будучи superuser?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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