172 похожих чатов

Всем привет. Помогите разобраться с ситуацией. Создал роль на сервере: DO $do$ DECLARE

sch text;
BEGIN
FOR sch IN SELECT nspname FROM pg_namespace
LOOP
EXECUTE format($$ GRANT usage, create ON SCHEMA %I TO role_rw$$, sch);
execute format($$ GRANT all PRIVILEGES ON ALL TABLES IN SCHEMA %I to role_rw$$, sch);
execute format($$ ALTER DEFAULT PRIVILEGES in schema %I GRANT all PRIVILEGES ON TABLES TO role_rw$$, sch);
execute format($$ grant all PRIVILEGES on all functions in schema %I to role_rw$$,sch);
execute format($$ grant all PRIVILEGES on all SEQUENCES in schema %I to role_rw$$,sch);
END LOOP;
END;
$do$;


Создал 2-ух пользователей и добавил в эту роль.

Ситуация:
1-ый пользователь создает таблицу, а 2-ой пользователь не имеет доступа к этой таблице.
Разве наследие берется не от роли ?

10 ответов

27 просмотров

версия PG 10.17

ALTER DEFAULT PRIVILEGES работает для роли которая его выполнила, если явно не указано FOR ROLE , Следовательно данная конструкция будет работать только в случае если таблицу создаёт указанная роль, в вашем случае тот кто выполнил данный запрос.

Denis
ALTER DEFAULT PRIVILEGES работает для роли которая...

оно навешивается на схемы, в схеме я вижу, для роли права по умолчанию.

Марсель Габдрахманов
оно навешивается на схемы, в схеме я вижу, для рол...

И да, и нет. Посмотрите как оно выглядит в дампе базы pg_dump database_name -s > 1.sql Там будет явно указана роль, и это будет та роль под который вы выполнили данный запрос.

Denis
И да, и нет. Посмотрите как оно выглядит в дампе б...

Скажем так, событие которое триггерит данный грант, это не просто создание объекта в схеме, а создание объекта в схеме определённым пользователем.

Denis
Скажем так, событие которое триггерит данный грант...

то есть по сути, запрос должен быть вот таким ? ALTER DEFAULT PRIVILEGES for role role_rw in schema public GRANT all PRIVILEGES ON tables to role_rw

Марсель Габдрахманов
то есть по сути, запрос должен быть вот таким ? A...

Да, всё верно. Но я не знаю насколько это корректно работает для роли, а не юзера, не проверял. Если работает успешно, просьба поделиться потом тут)

Марсель Габдрахманов
то есть по сути, запрос должен быть вот таким ? A...

Данная команда выглядит бессмысленно: даёте гранты на объекты, созданные из под роли role_rw для этой же роли, а эта роль в свою очередь и так имеет все права, если выступает в качестве владельца объекта. Мб вот это поможет: https://pcnews.ru/blogs/sahar_dla_slonenka____bystryj_start_c_postgresql_dla_komand_v_nlmk-1230872.html#gsc.tab=0 Суть в том, что у всех объектов схеме должен быть один владелец (техническая роль), для этой роли настраиваем default privileges на гранты для тех ролей, которые реально должны читать, писать и управлять объектами. Главное, чтобы при создании новых объектов - они создавались из под этой технической роли, так как если делать просто через смену владельца, дефолты не накатываются.

Sergey Pshenichnikov
Данная команда выглядит бессмысленно: даёте гранты...

спасибо, думаю проще перебрать на 14 версию и выше, и манипулировать встроенными ролями просто (read_data / write_data)

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

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта