【发布时间】:2019-09-12 14:33:01
【问题描述】:
我试图让数据库用户能够更改/删除(某些)表,但不对它们授予权限。这可能吗?
看起来他们需要成为表的所有者,但来自https://www.postgresql.org/docs/current/sql-grant.html
删除对象或以任何方式更改其定义的权利不被视为可授予的特权;它是所有者固有的,不能授予或撤销。 (但是,可以通过授予或撤销拥有该对象的角色的成员资格来获得类似的效果;见下文。)所有者也隐含地拥有该对象的所有授予选项。
这听起来是不可能的。然而,这绝对是这样吗?是否有某种方法可以使用触发器,例如使某些 GRANT 失败?
【问题讨论】:
-
您无法阻止所有者颁发授权,但我假设用户将通过您创建的过程/功能工作。你把它放在一个单独的模式中,然后可以授权用户在过程/函数上执行。一旦创建了对象,它就归该角色所有,或者由该角色拥有,然后授予创建它的用户 DML 访问权限。这样用户就不能颁发授权,因为他们实际上不是所有者。
标签: postgresql