Postgresql: ошибка "должен быть владельцем отношения" при изменении объекта владельца
Что такое grant
параметр/трюк, который мне нужно предоставить текущему пользователю ( "userA" ), чтобы он мог изменить владельца объекта, принадлежащего другому пользователю ( "userC" )?
Точнее, таблица контактов принадлежит пользователю C, и когда я выполняю следующий запрос для изменения владельца к пользователю B, связанному с userA:
alter table contact owner to userB;
Я получаю эту ошибку:
ERROR: must be owner of relation contact
Но у пользователяA все необходимые права для этого обычно (опция предоставления "create on schema" должна быть достаточной):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Thks
Выход командной строки:
[email protected]:~# psql -U userA myDatabase
myDataBase=>\dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
Ответы
Ответ 1
Благодаря комментарию Майка, я перечитал документ, и я понял, что мой текущий пользователь (ака. userA, который уже имеет привилегию создания) не был прямым/косвенным членом новой собственной роли...
Итак, решение было довольно простым, я только что сделал этот грант:
grant userB to userA;
Что все люди; -)
Update:
Другое требование состоит в том, что объект должен принадлежать пользователю userA перед его изменением...
Ответ 2
Из прекрасного руководства.
Вы должны владеть таблицей, чтобы использовать ALTER TABLE.
Или быть суперпользователем базы данных.
ОШИБКА: должен быть владельцем отношения
Сообщения об ошибках PostgreSQL обычно находятся на месте. Это одно место.