如何创建具有删除PostgreSQL中表的权限的角色?

unftdfkk  于 2022-12-03  发布在  PostgreSQL
关注(0)|答案(1)|浏览(281)

我需要创建一个单独的角色,该角色将具有删除表的权限。问题是数据库包含的表超过1000个。是否有任何方法可以一次更改所有表的权限(添加新角色),而无需手动更改每个表的权限?

q3qa4bjr

q3qa4bjr1#

在PostgreSQL中,你不可能轻易地做到这一点。
1.对象的所有者(创建对象的角色)
1.该角色的直接或间接成员
1.对包含表的方案具有CREATE权限的用户
1.超级用户
因此,让用户可以删除任何表的唯一方法是创建一个超级用户,或在所有方案上给予用户CREATE。超级用户还可以执行其他任何操作,您无法限制这一点。在方案上拥有CREATE的用户可以在其中创建任意对象。
我认为这个要求很奇怪,但你可以做的是:创建一个属于超级用户的SECURITY DEFINER函数,该函数可以删除任何表,撤消PUBLICEXECUTE权限,并仅将其授予所需的角色。
另一种方法是使用架构权限并编写一个事件触发器,以防止用户执行除删除对象以外的任何操作。

相关问题