Права на таблицу созданную другим пользователем
Помогите разобраться с проблемой.
Есть БД с двумя схемами. Созданы две идентичные роли:
GRANT ALL ON SCHEMA schema_1
GRANT ALL ON SCHEMA schema_2
GRANT ALL ON ALL TABLES IN SCHEMA schema_1
GRANT ALL ON ALL TABLES IN SCHEMA schema_2
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_1 GRANT ALL ON TABLES
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_2 GRANT ALL ON TABLES
но при создании таблицы в одной из схем одной ролью, у другой роли нет никаких прав на нее:
ERROR: permission denied for table
Ответы (1 шт):
Синтаксис ALTER DEFAULT PRIVILEGES гласит:
ALTER DEFAULT PRIVILEGES
[ FOR { ROLE | USER } target_role [, ...] ]
[ IN SCHEMA schema_name [, ...] ]
abbreviated_grant_or_revoke
где target_role:
Change default privileges for objects created by the target_role, or the current role if unspecified.
Поведение задокументированное. И оно отличается от прямого "интуитивного" прочтения текста команды.
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_1 GRANT ALL ON TABLES TO <role_name>;
Не означает "автоматически добавить GRANT ALL ON TABLE TO <role_name> при создании таблиц в схеме schema_1". А означает команду:
ALTER DEFAULT PRIVILEGES FOR USER CURRENT_USER IN SCHEMA schema_1 GRANT ALL ON TABLES TO <role_name>;
из которой было опущено подразумеваемое по-умолчанию выражение FOR USER CURRENT_USER.
То есть, это ALTER DEFAULT PRIVILEGES правило применяется только при create table, выполняемом в схеме schema_1 и только при выполнении от имени того же самого пользователя, который этот ALTER DEFAULT PRIVILEGES скомандовал.
Чтобы ALTER DEFAULT PRIVILEGES применялся для create table выполненного от имени другого пользователя - для этого пользователя должен быть соответствующий ALTER DEFAULT PRIVILEGES
ALTER DEFAULT PRIVILEGES FOR USER user1 IN SCHEMA schema_1 GRANT ALL ON TABLES TO user2;
ALTER DEFAULT PRIVILEGES FOR USER user2 IN SCHEMA schema_1 GRANT ALL ON TABLES TO user1;
Эквивалента ALTER DEFAULT PRIVILEGES FOR USER ANY нет. ALTER DEFAULT PRIVILEGES должен быть явно указан для каждого пользователя, который может создавать таблицы.
PS: GRANT ALL - мысль довольно неудачная и будет вести к приключениям. Продумайте свою модель прав ещё раз.