Я создал две групповые роли в Postgres 9.2: один называется admins, а другой называется readers.
Идея очень проста: admins создать таблицы и readers иметь доступ на чтение к этим таблицам.
После предоставления привилегий обеим ролям группы все работало как ожидалось для объектов exisintg. Но как насчет новых объектов?
Итак, прочитав этот пост, я изменил привилегии по умолчанию, чтобы предоставить SELECT привилегии readers для любой новой таблицы, которая admins create:
ALTER DEFAULT PRIVILEGES FOR ROLE admins IN SCHEMA public GRANT SELECT ON TABLES TO readers;
ALTER DEFAULT PRIVILEGES FOR ROLE admins IN SCHEMA public GRANT SELECT ON SEQUENCES TO readers;
Но, по-видимому, ALTER DEFAULT PRIVILEGES влияет только на роль, а не на роль этой роли. Позвольте мне показать вам.
Если я вхожу в качестве userX (член admins) и создаю новую таблицу, не предоставляются привилегии по умолчанию (и, следовательно, readers не может получить доступ к этой таблице):
test=# CREATE TABLE table1 (name VARCHAR(10)); -- Creating table as userX
test=# \dp table1
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+--------+-------+-------------------+--------------------------
public | table1 | table | |
Однако привилегии по умолчанию предоставляются, если я создаю таблицу как admins (readers может получить доступ к этой таблице):
test=# SET ROLE admins;
test=# CREATE TABLE table2 (name VARCHAR(10)); -- Creating table as admins
test=# \dp table2
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+--------+-------+-----------------------+--------------------------
public | table2 | table | readers=r/admins +|
| | | admins=arwdDxt/admins |
Есть ли способ изменить привилегии по умолчанию для ВСЕХ членов групповой роли? Или я должен просто изменять привилегии по умолчанию для каждого пользователя?
ОБНОВЛЕНИЕ: В этом форуме PostgreSQL кто-то задал очень похожий вопрос, и ответ был:
К сожалению, я не вижу способа добиться желаемого, не предоставляя привилегии по умолчанию всем, кто участвует.
Однако этот вопрос задавали 2 года назад. Есть ли решение сейчас?