所有者可能没有 table 权限吗?

Is it possible for an owner to not have table-privileges?

我们一直在尝试在其中一个数据库中创建许多角色和用户。有一次我遇到了这个问题,我发现它很难重现。

它可以在数据库中重现,但是当我创建一个新数据库并尝试相同的操作时,它并没有发生:(

ALTER TABLE public.table_name OWNER TO role_name;

通常,在我们运行这个查询之后。 table_name 将由 role_name role/user 变为 owned

在 运行 上面的查询之后,如果我们 运行 下面的查询:

select grantee, table_catalog, privilege_type, table_schema, table_name 
from information_schema.table_privileges 
where table_name = 'table_name' 
order by grantee, table_schema, table_name

我们将得到以下结果:

 role_name   | database_name   | INSERT       | public   | table_name
 role_name   | database_name   | DELETE       | public   | table_name
 role_name   | database_name   | SELECT       | public   | table_name
 role_name   | database_name   | UPDATE       | public   | table_name
 role_name   | database_name   | TRUNCATE     | public   | table_name
 role_name   | database_name   | REFERENCES   | public   | table_name
 role_name   | database_name   | TRIGGER      | public   | table_name

然而,在一个特别糟糕的数据库中(我对语言感到抱歉,但上帝知道我经历了什么,我相信他这次会原谅我 :P )在我授予所有权之后,新角色是成为所有者,但它没有 SELECT, INSERT 或与此相关的任何特权。

那么,我的问题是:

是否存在这样的情况:当我们将 table 的所有权分配给角色时,该角色可以是所有者但仍然没有 select、插入、更新、删除特权?

如果是,什么时候,为什么?

the role can be the owner and still not have select, insert, update, delete privilege?

是。 The manual:

An object's owner can choose to revoke their own ordinary privileges, for example to make a table read-only for themselves as well as others. But owners are always treated as holding all grant options, so they can always re-grant their own privileges.

超级用户可以做所有者可以做的任何事情。

棘手的细节:所有者(或超级用户)可以从他自己(所有者)那里获得 REVOKE 特权。如果所有权随后易手,新所有者将继承前任所有者拥有的一组特权 - 加上新所有者可能已经拥有的任何特权。所以union之前角色的权限和所有者的权限。这些就是 owner.

的新特权

如果所有权再次易手,则所有特权都将被传递!原拥有者将失去他直接拥有的所有特权。

但是任何角色都可以通过另一个角色的成员身份或通过 PUBLIC 特权继承额外的特权。

密切相关: