转移表所有权



在Postgres中,当表所有者说"xxx";试图将表所有权转移到用户";yyy";,他收到错误

错误:必须是角色"的成员;yyy";

当我进一步搜索时,可以通过两种方式修复它。

  1. ;超级用户";,我们可以转移任何表的表所有权。然而,它每次都需要超级用户/核心DBA的干预。

  2. 作为用户";yyy";我们需要像";将yyy授予xxx&";,然后作为用户";xxx";类似于"转移表所有权"的转移表所有权;将表test_table所有者更改为yyy&";。然而,这似乎混淆了用户";yyy";至";xxx";,以及用户";xxx";将获得"的所有权限和授予;yyy";。尽管她有可能拥有桌子,但也会获得不必要的特权,这不是她的本意。

除了这两种方法之外,还有什么方法可以转移表所有权吗?

我们在这种情况下遇到了很多问题,我们提出了解决方案,但在您的情况下,权限提升不是一个选项我认为这是不可能的,因为只有可以转移所有权的角色才能访问这两个角色,在您的案例中是xxx和yyy。

根据REASSIGN OWNED的文件:https://www.postgresql.org/docs/current/sql-reassign-owned.html

REASSIGN OWNED需要源角色和目标角色的成员身份。

根据REASSIGN OWNED的文档:https://www.postgresql.org/docs/current/sql-reassign-owned.html

若要更改所有者,您还必须是新拥有角色的直接或间接成员,并且该角色必须对表的架构具有CREATE权限。

我脑海中唯一可以尝试的想法是,你可以给予";弱势角色";至";更有特权的角色";在这种情况下,假设:

  • xxx-更多特权
  • yyy-无特权

GRANT yyy TO xxx,然后从xxx的角色开始,我们实际上可以进行reassign owned by yyy TO xxx

我已经在本地用容器测试过了,它有效,如果这有帮助,请告诉我:(

不,没有办法避免这些要求。正如文件所说:

您必须拥有该表才能使用ALTER TABLE。[…]若要更改所有者,您还必须是新所有者角色的直接或间接成员,并且该角色必须对表的架构具有CREATE权限。(这些限制强制要求更改所有者不会做任何你不能通过删除和重新创建表来做的事情。然而,超级用户无论如何都可以更改任何表的所有权。(

关键在括号中:更改对象的所有权将不允许您执行DROP/CREATE无法执行的任何操作。其他任何东西都是安全漏洞。

REASSIGN OWNED可以批量更改对象所有权,但权限要求相同。

相关内容

  • 没有找到相关文章

最新更新