首页 > 解决方案 > PostgreSQL 错误 [42501]:错误:必须是关系表的所有者

问题描述

我正在维护一个数据库“db”,其中大约有 100 个表。我有一个超级用户“A”,“A”是所有表的所有者。如何在不从“A”继承所有权限的情况下向特定于单个表的新用户“B”授予 Alter 权限。

我尝试提供Grant A to B;. 此授予选项授予从“A”到“B”的所有权限。我希望将上述情况限制为一个特定的表。这可能吗?

标签: postgresqlddldatabase-administrationprivileges

解决方案


文档最近获得了这个解释:

修改或销毁对象的权利是对象的所有者所固有的,并且本身不能被授予或撤销。(但是,与所有特权一样,该权限可以由拥有角色的成员继承;参见第 21.3 节。)

所以能跑ALTER TABLE的人只有:

  • 超级用户

  • 表所有者

  • 表所有者角色的成员

GRANT a TO b给予某人特权的唯一方法也是如此。

您也许可以使用SECURITY DEFINER属于 的函数a,但要小心。


推荐阅读