有没有办法禁用更新/删除但仍然允许触发器执行它们?

Pac*_*aco 6 postgresql privileges triggers

基本上,我希望能够用REVOKE命令禁用UPDATEDELETE,但我还是想在桌子上的触发器来更新我行.

我的触发器对新插入的行执行,并更新特定字段.所以我仍然想要这种行为,但不会被禁用REVOKE或使用RULE.(我看了一篇SO帖子)

有没有办法继续使用UPDATE/ INSERT命令TRIGGERS但禁用其余的命令?

Erw*_*ter 16

是的,这是可能的.

触发器以触发器功能的特权运行,默认为SECURITY INVOKER触发器功能有效地执行current_user,在您的情况下插入行的权限.

如果当前用户没有对触发器函数所操作的表具有所需权限,则基础表中的原始操作将出错.

但是,您可以使用SECURITY DEFINER触发器功能使此功能以该功能的权限运行OWNER.

如果你有一个超级用户拥有触发功能,它可以做任何事情 - 这可能是一个安全隐患.请考虑手册中有关安全编写SECURITY DEFINER函数的说明.

但是,仅OWNER使用触发器功能的必要特权来做一个明确的角色是明智的.您甚至可以在不登录的情况下创建"守护程序"角色,充当此类操作的权限包.然后,您只需要为此守护程序角色授予所需的权限(在模式,表,序列......上).对于更复杂的设计,您应该将权限捆绑在"组角色"中(同样,无需登录),并将这些组角色授予需要它的角色(在此示例中为守护进程角色),从而有效地使它们成为"组成员".我做了很多.

还要考虑dba.SE上有关函数本身特权的相关问题.