【发布时间】:2021-12-27 01:20:18
【问题描述】:
我们一直在尝试在其中一个数据库中创建许多角色和用户。有一次我遇到了这个问题,我发现它很难重现。
它在数据库中是可重现的,但是当我创建一个新数据库并尝试相同时它不会发生:(
ALTER TABLE public.table_name OWNER TO role_name;
通常,在我们运行此查询之后。 table_name 将是owned 由role_name 角色/用户。
如果我们运行以下查询,则在运行上述查询后:
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 或任何特权。
所以,我的问题是:
是否存在当我们将表的所有权分配给角色时,该角色可以是所有者但仍然没有选择、插入、更新、删除权限的情况?
如果是,何时以及为什么?
【问题讨论】:
-
是的,“一个对象的所有者可以选择撤销他们自己的普通权限,例如使一个表对自己和其他人都是只读的。但是所有者总是被视为持有所有授权选项,这样他们就可以随时重新授予自己的权限。”
-
感谢您提供详细信息。我也看了说明书。在我的情况下,特权没有被撤销。在我检查权限时授予所有权后,立即选择权限缺失。
-
@mshabou:在创建对象时应用“默认权限”,而不是在所有权更改时应用。题目不同,不适用于本题。
-
欧文的回答给了我一个很好的线索,明天将确认。谢谢@mshabou
标签: sql postgresql privileges postgresql-13