为什么当表有不同的所有者时,schema的所有者不能改变表的所有者- Postgres



模式的所有者-public',以及模式内表的所有者,称为'postgres

"。我试图改变我的表所有者(当我登录到user: 'eyal)')给用户:'eyal'但是我得到了错误-"必须是表的所有者">

怎么可能是一个模式的所有者,但没有能力改变模式表的所有者?

我尝试使用以下命令:

ALTER TABLE public.table_name OWNER TO "eyal";

GRANT ALL PRIVILEGES 
ON ALL TABLES IN SCHEMA "public"
TO "eyal";

但是没有效果

怎么可能是模式的所有者,但没有能力要更改模式表所有者吗?

https://www.postgresql.org/docs/current/ddl-schemas.html DDL-SCHEMAS-PRIV

默认情况下,用户不能访问他们不访问的模式中的任何对象自己的。要允许这样做,模式的所有者必须授予USAGE模式上的特权。默认情况下,每个人都有该权限模式public。允许用户使用类中的对象模式中,可能需要酌情授予额外的特权

用户还可以在其他人的模式中创建对象。为此,需要授予模式上的CREATE权限。在从PostgreSQL 14或更早版本升级的数据库中,每个人都有这个功能public模式上的权限

所以它就像你作为模式所有者(eyal)授予创建和使用权限另一个用户(postgres)是表的所有者。
也是https://www.postgresql.org/docs/12/ddl-priv.html#PRIVILEGE-ABBREVS-TABLE模式只有两个特权:USAGE和CREATE。因此,作为模式所有者,您只能将这两个特权应用于其他角色。

文档描述了这一点:

必须拥有表才能使用ALTER TABLE。要更改表的模式或表空间,您还必须对新模式或表空间具有CREATE权限。[…要修改所有者,您必须是新拥有角色的直接或间接成员,并且该角色必须在表的模式上具有CREATE权限。(这些限制强制修改所有者不会做任何删除和重新创建表所不能做的事情。但是,超级用户可以修改任何表的所有权。

另一种选择是你是一个超级用户,可以做任何事情。

最新更新