【发布时间】:2016-03-20 03:14:27
【问题描述】:
是否可以只允许那些有WHERE 子句的DELETE 查询?
我已经尝试使用RULE,但我不知道在WHERE 子句中添加什么,现在这个RULE 禁用所有DELETE 查询:
create rule prevent_delete_all as on DELETE to site
DO INSTEAD NOTHING
编辑
撤销用户的删除访问权限并创建用于调用DELETE 的存储过程的问题是我不想重写使用数据库的应用程序代码
【问题讨论】:
-
考虑:撤销大多数帐户对表的删除访问权限,并且只允许使用 where 子句所需参数的存储过程?仅检查 where 子句的问题是
where 1=1仍然会删除所有 -
如果我错了,请纠正我,但我相信
Rule的条件仅适用于实际数据,而不适用于一般意义上的x子句,例如WHERE子句存在.我认为这不是您的解决方案的正确格式。但话虽如此,我很想看看其他人的解决方案(似乎是一个方便的诀窍) -
大声笑,不要删除这篇文章,我会从我的anti-pattern收藏中链接它。
-
@VsevolodGoloviznin 也不要忘记你的老朋友“截断”,根据你的应用程序,你可能需要以某种方式防止滥用/误用它!
-
@xQbert,让 delete 完成它的工作可能更有效,不要提交;检查删除后是否有
exists至少一行,如果没有 - 回滚。exists通常比count更有效率。
标签: sql postgresql