Postgresql:更改所有者对象时出现错误“必须是关系的所有者”
Posted
技术标签:
【中文标题】Postgresql:更改所有者对象时出现错误“必须是关系的所有者”【英文标题】:Postgresql: error "must be owner of relation" when changing a owner object 【发布时间】:2015-04-19 12:21:12 【问题描述】:什么是grant
选项/技巧我需要给当前用户(“userA”)以允许他更改属于另一个用户的对象的所有者(“用户C")?
更准确地说,contact 表由 userC 拥有,当我执行以下查询以将所有者更改为 userB 时,与 userA 连接:
alter table contact owner to userB;
我收到此错误:
ERROR: must be owner of relation contact
但 userA 拥有正常执行此操作所需的所有权限(“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;
感谢
命令行输出:
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=>
【问题讨论】:
【参考方案1】:感谢 Mike 的评论,我重新阅读了该文档,我意识到我当前的用户(即已经拥有 create 权限的 userA)不是 direct /新拥有角色的间接成员...
所以解决方案非常简单——我刚刚完成了这项拨款:
grant userB to userA;
这就是所有人;-)
更新:
另一个要求是对象必须由用户 userA 拥有,然后才能对其进行更改...
【讨论】:
当我们使用错误的用户执行更新/删除等操作时出现此问题。我正面临此问题,因为我使用错误的用户执行 DML。当我选择正确的用户时,问题已解决.另外,如果您将DML权限授予当前用户,这个问题将得到解决。 只想提一下,如果任何用户区分大小写,则应将其引用。例如:将“UserB”授予 userA -> 在这种情况下,第一个用户区分大小写,但第二个用户不区分 这对我有用,而不是为所有权做alter table
,只需运行它就可以了。我只是将此命令读为grant createUser to alterUser;
,其中createUser
是创建我的表的人,alterUser
是尝试改变它的人。我遇到了这个问题,我们在配置中更改了 DB 用户,而 DB 现有的表很少。【参考方案2】:
来自the fine manual。
您必须拥有该表才能使用 ALTER TABLE。
或者是数据库超级用户。
错误:必须是关系联系人的所有者
PostgreSQL 错误消息通常会出现。这个很到位。
【讨论】:
文档更加细致入微:您*必须拥有该表*才能使用 ALTER TABLE。 [...] 要更改所有者,您*还必须是新拥有角色的直接或间接成员*,并且该角色必须对表的架构具有 CREATE 权限。 => 目标用户(又名.userB) 已经拥有创建权限。在架构上,但我当前的用户(又名 userA)不是新角色的间接成员。感谢 Mike 启发了我! 一个 RTFM 答案,如果我找到了! 或者你可以这样做:dba.stackexchange.com/questions/27380/…【参考方案3】:这解决了我的问题:更改所有权的示例 alter table 语句。
ALTER TABLE databasechangelog OWNER TO arwin_ash;
ALTER TABLE databasechangeloglock OWNER TO arwin_ash;
【讨论】:
请在您的回答中添加一些解释。 要更改所有权,您需要成为所有者哈哈 拥有超级用户角色后,我运行这些命令以使自己成为相应对象的所有者。这让我可以运行 alter、delete 命令。谢谢!以上是关于Postgresql:更改所有者对象时出现错误“必须是关系的所有者”的主要内容,如果未能解决你的问题,请参考以下文章
42501:在 Postgresql 中查询时出现特权不足错误
将 oracle 转换为 PostgreSQL 时出现数字溢出