我需要创建一个单独的角色,该角色将具有删除表的权限。问题是数据库包含的表超过1000个。是否有任何方法可以一次更改所有表的权限(添加新角色),而无需手动更改每个表的权限?
q3qa4bjr1#
在PostgreSQL中,你不可能轻易地做到这一点。1.对象的所有者(创建对象的角色)1.该角色的直接或间接成员1.对包含表的方案具有CREATE权限的用户1.超级用户因此,让用户可以删除任何表的唯一方法是创建一个超级用户,或在所有方案上给予用户CREATE。超级用户还可以执行其他任何操作,您无法限制这一点。在方案上拥有CREATE的用户可以在其中创建任意对象。我认为这个要求很奇怪,但你可以做的是:创建一个属于超级用户的SECURITY DEFINER函数,该函数可以删除任何表,撤消PUBLIC的EXECUTE权限,并仅将其授予所需的角色。另一种方法是使用架构权限并编写一个事件触发器,以防止用户执行除删除对象以外的任何操作。
CREATE
SECURITY DEFINER
PUBLIC
EXECUTE
1条答案
按热度按时间q3qa4bjr1#
在PostgreSQL中,你不可能轻易地做到这一点。
1.对象的所有者(创建对象的角色)
1.该角色的直接或间接成员
1.对包含表的方案具有
CREATE
权限的用户1.超级用户
因此,让用户可以删除任何表的唯一方法是创建一个超级用户,或在所有方案上给予用户
CREATE
。超级用户还可以执行其他任何操作,您无法限制这一点。在方案上拥有CREATE
的用户可以在其中创建任意对象。我认为这个要求很奇怪,但你可以做的是:创建一个属于超级用户的
SECURITY DEFINER
函数,该函数可以删除任何表,撤消PUBLIC
的EXECUTE
权限,并仅将其授予所需的角色。另一种方法是使用架构权限并编写一个事件触发器,以防止用户执行除删除对象以外的任何操作。