加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:12:55 所属栏目:百科 来源:网络整理
导读:基本上,我希望能够使用REVOKE命令来禁用UPDATE和DELETE,但我仍然希望表上的触发器更新我的行. 我的触发器对新插入的行执行,并更新特定字段.所以我仍然希望这种行为,但不会使用REVOKE或RULE禁用它们. (I saw an SO post) 有没有办法继续在TRIGGERS中使用UPDAT
基本上,我希望能够使用REVOKE命令来禁用UPDATE和DELETE,但我仍然希望表上的触发器更新我的行.

我的触发器对新插入的行执行,并更新特定字段.所以我仍然希望这种行为,但不会使用REVOKE或RULE禁用它们. (I saw an SO post)

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

是的,这是可能的.

触发器使用触发器功能的特权运行,默认为SECURITY INVOKER,这意味着,触发器功能可以使用current_user的特权有效执行,在您的情况下是一个插入行.

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

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

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

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

还要考虑有关函数本身特权的this related question on dba.SE.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读