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



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

这在PostgreSQL中是不可能做到的。惟一可以删除对象的角色(=user)是

  1. 对象的所有者(创建对象的角色)

  2. 该角色的直接或间接成员

  3. 在包含表

    的模式上具有CREATE权限的用户
  4. 超级用户

因此,让一个用户可以删除任何表的唯一方法是创建一个超级用户或在所有模式上为该用户指定CREATE。超级用户也可以做其他任何事情,您不能限制这一点。在schema上使用CREATE的用户可以在schema中创建任意对象。

我认为这个要求是奇怪的,但是你可以做的是:创建一个属于超级用户的SECURITY DEFINER函数,可以删除任何表,从PUBLIC中撤销EXECUTE的特权,并将其仅授予所需的角色。

另一种选择可能是使用模式权限并编写一个事件触发器,以防止用户做除删除对象之外的任何事情。

最新更新