Postgresql:更改所有者对象时出错"必须是关系的所有者"

gud*_*ier 52 postgresql grant

grant我需要给当前用户(" userA ")以允许他更改由另一个用户(" userC ")所属的对象所有者的选项/技巧是什么?

更确切地说,联系表由userC拥有,当我执行以下查询以将所有者更改为userB时,与userA连接:

alter table contact owner to userB;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ERROR:  must be owner of relation contact
Run Code Online (Sandbox Code Playgroud)

但是userA通常都需要权限(" 在模式上创建 "授权选项应该足够了):

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;
Run Code Online (Sandbox Code Playgroud)

THKS


命令行输出:

root@server:~# 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=>
Run Code Online (Sandbox Code Playgroud)

gud*_*ier 85

感谢Mike的评论,我重新阅读了文档,并且我意识到我当前的用户(也就是已经拥有创建权限的userA )并不是新拥有角色直接/间接成员 ......

所以解决方案非常简单,我刚刚完成了这笔补助:

grant userB to userA;
Run Code Online (Sandbox Code Playgroud)

那是所有人;-)


更新:

另一个要求是在更改对象之前,对象必须由用户userA拥有...


Mik*_*ll' 16

精细的手册.

您必须拥有该表才能使用ALTER TABLE.

或者是数据库超级用户.

错误:必须是关系联系人的所有者

PostgreSQL错误消息通常是现货.这个是现货.

  • 文档更加细致:_您必须拥有表*才能使用ALTER TABLE.[...]要更改所有者,您*还必须是新拥有角色*的直接或间接成员,并且该角色必须对表的schema._ =>目标用户(也称为userB)具有CREATE特权.已经创建了priv.在架构上,但我当前的用户(也称为userA)不是新角色的间接成员.谢谢迈克让我开悟了! (3认同)
  • RTFM 答案(如果我找到过的话)! (2认同)

dob*_*oje 12

这解决了我的问题:更改所有权的示例更改表语句。

ALTER TABLE databasechangelog OWNER TO arwin_ash;
ALTER TABLE databasechangeloglock OWNER TO arwin_ash;
Run Code Online (Sandbox Code Playgroud)

  • 要更改所有权,您需要成为所有者哈哈 (7认同)
  • 在我拥有超级用户角色后,我运行这些命令以使自己成为相应对象的所有者。这允许我运行更改、删除命令。谢谢! (2认同)