Права на таблицу созданную другим пользователем
Помогите разобраться с проблемой.
Есть БД с двумя схемами. Созданы две идентичные роли:
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
- мысль довольно неудачная и будет вести к приключениям. Продумайте свою модель прав ещё раз.