Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 ALTER DEFAULT PRIVILEGES - разъясните поведение.  [new]
Guzya
Member

Откуда:
Сообщений: 712
Доброго времени суток!
Решил с помощью ALTER DEFAULT PRIVILEGES выдать право select пользователю USER2 на все будущие таблицы всех пользователей в PUBLIC.

Делаю из под postgres
alter default privileges in schema public grant select on tables TO user2;
create table t1();


Захожу user2 проверяю, все нормально.

Захожу user1, создаю таблицу, подключаюсь user2 и я не имею прав на просмотр.

Если я из под user1 делаю
alter default privileges in schema public grant select on tables TO user2;
create table t1();


То все нормально.
При этом \ddp
Права доступа по умолчанию
Владелец Схема Тип Права доступа
postgres public таблица user2=r/postgres
user1 public таблица user2=r/user1



Получается, если у меня в бд 10 пользователей и мне нужно что бы они могли ЧИТАТЬ ВСЕ таблицы, мне нужно из под каждого пользователя
выполнить alter default privileges для всех пользователей?
11 авг 20, 11:59    [22180789]     Ответить | Цитировать Сообщить модератору
 Re: ALTER DEFAULT PRIVILEGES - разъясните поведение.  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1280
Guzya
мне нужно из под каждого пользователя
выполнить alter default privileges для всех пользователей?

Да.

Можно сделать grant на роль и выдать эту роль пользователям вместо назначения каждому пользователю индивидуально. Но alter default privileges должен быть сделан для всех, кто может создавать соответствующие объекты. Потому что пока for role не указан - это означает лишь подразумевать текущего пользователя, а не любого пользователя.
11 авг 20, 12:39    [22180824]     Ответить | Цитировать Сообщить модератору
 Re: ALTER DEFAULT PRIVILEGES - разъясните поведение.  [new]
Guzya
Member

Откуда:
Сообщений: 712
Понятно, спасибо!
11 авг 20, 12:47    [22180832]     Ответить | Цитировать Сообщить модератору
 Re: ALTER DEFAULT PRIVILEGES - разъясните поведение.  [new]
kupalinka
Member

Откуда:
Сообщений: 3
Доброго дня!

Вот вроде все должно быть понятно, но в голове не укладывается. Помогите, пожалуйста

create role user1 login;
create role user2 login;

create role role_rw;
create role role_ro;

grant role_rw to user1;
grant role_ro to user2;

alter role user1 inherit;
alter role user2 inherit;

create schema schema1;

И хочется мне, чтобы по умолчанию все пользователи, имеющие роль role_ro, могли читать все создаваемые таблицы в схеме. А с ролью role_rw - имели все права.
Для этого есть alter default privileges

В документации есть FOR ROLE и IN SCHEMA - что в моем случае нужно использовать?

ALTER DEFAULT PRIVILEGES FOR ROLE role_ro in schema schema1 grant select ON tables to role_ro;
ALTER DEFAULT PRIVILEGES FOR ROLE role_rw in schema schema1 grant all privileges ON tables to role_rw;

ALTER DEFAULT PRIVILEGES IN SCHEMA schema1 GRANT select ON TABLES TO role_ro;
ALTER DEFAULT PRIVILEGES IN SCHEMA schema1 GRANT all privileges ON TABLES TO role_rw;

Или я изначально что-то упускаю?
25 мар 21, 16:33    [22299935]     Ответить | Цитировать Сообщить модератору
 Re: ALTER DEFAULT PRIVILEGES - разъясните поведение.  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1280
kupalinka,

for role - это кто будет создавать объекты. И for role есть всегда, не бывает alter default privileges для кого угодно. Если вы не указали for role - подразумевается тот, кто этот alter default privileges вызвал.

Поэтому для каждого пользователя, кто будет здесь что-то создавать, добавляете по отдельному alter default privileges.


in schema - это уже в зависимости от задачи. Если хотите выдавать автоматические права только в конкретной схеме - то указываете in schema.
25 мар 21, 17:02    [22299957]     Ответить | Цитировать Сообщить модератору
 Re: ALTER DEFAULT PRIVILEGES - разъясните поведение.  [new]
kupalinka
Member

Откуда:
Сообщений: 3
Melkij,

Melkij
for role - это кто будет создавать объекты. И for role есть всегда, не бывает alter default privileges для кого угодно. Если вы не указали for role - подразумевается тот, кто этот alter default privileges вызвал.

т.е. т.к. создавать объекты в схеме будут только носители роли _rw, получится вот так?
ALTER DEFAULT PRIVILEGES FOR ROLE role_rw in schema schema1 grant select ON tables to role_ro;
ALTER DEFAULT PRIVILEGES FOR ROLE role_rw in schema schema1 grant all privileges ON tables to role_rw;

Melkij
Поэтому для каждого пользователя, кто будет здесь что-то создавать, добавляете по отдельному alter default privileges.

А inherit не помогает наследовать права ролей?
Несколько пугает перспектива по каждому пользователю проходить с alter, т.к. предполагается наличие множества схем и множества пользователей с разделением прав...
Я просто сужу по опыту работы с терадатой. Там роли грантуются права на схему, пользователю грантуется роль. И все прокидывается прекрасно =)
25 мар 21, 19:27    [22300055]     Ответить | Цитировать Сообщить модератору
 Re: ALTER DEFAULT PRIVILEGES - разъясните поведение.  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4691
kupalinka,

если вы хотите чтобы система прав работала нормально
создавать должен все админ от специального пользователя
и выдавать права он же + default grants...

>>А inherit не помогает наследовать права ролей?
>>Несколько пугает перспектива по каждому пользователю проходить с alter, т.к. предполагается наличие множества схем и множества пользователей с разделением прав...

если у вас много пользователей могут таблицы создавать то другого варианта у вас нет кроме как для всех делать alter default priviledges
(что в общем не сложно если создание пользователя в хранимку завернуть которая сама все нужные права бы ставила).


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
25 мар 21, 20:07    [22300066]     Ответить | Цитировать Сообщить модератору
 Re: ALTER DEFAULT PRIVILEGES - разъясните поведение.  [new]
vyegorov
Member

Откуда: Баньоло-ин-Пьяно
Сообщений: 1232
kupalinka,

Можно реализовать такую схему:
- при подключении пользователи имеют возможность только DML-ить таблицы
- для DDL-ов, пользователь должен сделать `SET ROLE master_of_universe;` (ну или как назовёте)
- также можно заморочиться и сделать так, что пока пользователь может DDL-ы, ему недоступны DML-ы, чтобы не было желания оставаться на высоких привилегиях всегда.

Тогда у вас все объекты будут иметь одного общего владельца и, соответственно, DEFAULT PRIVILEGES только ему нужны.
25 мар 21, 23:34    [22300139]     Ответить | Цитировать Сообщить модератору
 Re: ALTER DEFAULT PRIVILEGES - разъясните поведение.  [new]
kupalinka
Member

Откуда:
Сообщений: 3
Melkij, Maxim Boguk, vyegorov, большое спасибо за помощь!
31 мар 21, 23:00    [22302770]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить