sql - 所有者是否可能没有表特权?
问题描述
我们一直在尝试在其中一个数据库中创建许多角色和用户。有一次我遇到了这个问题,我发现它很难重现。
它在数据库中是可重现的,但是当我创建一个新数据库并尝试相同时,它不会发生:(
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
任何特权或任何特权。
所以,我的问题是:
是否有任何场景,当我们将表的所有权分配给角色时,角色可以是所有者,但仍然没有选择、插入、更新、删除权限?
如果是,何时以及为什么?
解决方案
角色可以是所有者,但仍然没有选择、插入、更新、删除权限?
是的。 手册:
对象的所有者可以选择撤销他们自己的普通权限,例如使表对自己和其他人都是只读的。但是所有者始终被视为持有所有授予选项,因此他们始终可以重新授予自己的权限。
超级用户可以做所有者可以做的任何事情。
棘手的细节:所有者(或超级用户)可以REVOKE
从他自己(所有者)那里获得特权。如果所有权随后易手,新所有者将继承前所有者拥有的一组特权- 加上新所有者可能已经拥有的任何特权。所以联合了以前角色的权限和所有者的权限。这些就是所有者的新特权。
如果所有权再次易手,则整个特权将被传递!先前的所有者失去了他直接拥有的所有特权。
但是任何角色都可以通过其他角色的成员资格或特权来继承额外的PUBLIC
特权。
密切相关:
推荐阅读
- ms-word - 在 Office JS 页面中拖放到 Word 文档
- vulkan - Vulkan 中的常量缓冲区使用的描述符类型是什么?
- android - Android Volley 发布错误
- java - 在 Spark 中的几个分区之间执行操作
- vmware - 打包程序:使用 vmware-vmx 置备时出错
- kubernetes - 如何在不知道值的情况下附加 DestinationRules?
- javascript - Mongodb在使用异步时保持一致的顺序
- java - Selenium 更新后 ExpectedConditions 将不起作用
- c# - 如何在MATLAB和C#中生成以相同值开头的随机数
- installation - Inno Setup Disable checkbox if another checkbox被选中