2015-02-18 8 views
25

Что такое опция/трюк grant Мне нужно предоставить текущему пользователю («userA»), чтобы он мог сменить владельца объекта, который принадлежит другим пользователем («userC»)?Postgresql: ошибка «должен быть владельцем отношения» при смене объекта владельца

Точнее, контакт таблица принадлежит userC и когда я выполнить следующий запрос для изменения владельца к USERB, связанный с ПользовательА:

alter table contact owner to userB; 

Я получаю эту ошибку:

ERROR: must be owner of relation contact 

Но ПользовательА имеет все необходимые права, чтобы сделать это нормально (далее "создать на схеме" вариант гранта должно быть достаточно):

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=> 

ответ

44

Благодаря Mike комментарий, я перечитал документ, и я понял, что мой текущий пользователь (он же. ПользовательА что уже имеет создать привилегию) не был прямой/косвенный член новая владеющее роль ...

Так что решение было довольно просто, я только что сделал этот грант:

grant userB to userA; 

это все народные ;-)


Update:

Другим требованием является то, что объект должен принадлежать пользователю ПользовательА перед изменением его ...

+0

Эта проблема возникает, когда мы используем неправильного пользователя для выполнения действий, таких как update/delete.я столкнулся с этой проблемой, потому что я использовал неправильного пользователя для DML. Когда я выбрал нужного пользователя, проблема была решена. Также, если вы предоставите привилегии DML для текущего пользователя, эта проблема будет решена. – Ankur

+0

Просто хочу упомянуть, что если какой-либо пользователь чувствителен к регистру, он должен быть указан. Например: предоставить «UserB» пользователю A ->, и в этом случае первый пользователь чувствителен к регистру, но второй не – guival

6

От the fine manual.

You must own the table to use ALTER TABLE.

Или быть суперпользователем базы данных.

ERROR: must be owner of relation contact

Сообщения об ошибках PostgreSQL обычно находятся на месте. Это одно место.

+0

Док более нюансами: _You * должен владеть таблицей * использовать ALTER ТАБЛИЦА. [...] Чтобы изменить владельца, вы * также должны быть прямым или косвенным членом новой собственной роли *, и эта роль должна иметь привилегию CREATE на схеме таблицы ._ => целевой пользователь (ака. UserB) уже создал приват. на схеме, но мой текущий пользователь (ака. userA) не был косвенным членом новой роли. Спасибо, Майк, просветил меня! – gudepier

Смежные вопросы