是否可以在Postgres中禁用删除所有查询?

时间:2015-12-14 15:14:51

标签: sql postgresql

是否可以只允许那些DELETE条件中包含WHERE条的查询?

我已尝试使用RULE,但我无法弄清楚要放入什么WHERE条款,此时此{{1}禁用所有RULE个查询:

DELETE

修改

从用户撤消删除访问权限以及为调用create rule prevent_delete_all as on DELETE to site DO INSTEAD NOTHING 创建存储过程的问题是,我不想重写使用数据库的应用程序代码

1 个答案:

答案 0 :(得分:0)

正如评论中所讨论的,在所有删除语句中要求WHERE子句并不会有多大帮助。问题是用户总是可以声明一个始终为true的WHERE子句 - 例如:

Delete from students where 1=1;

我之前曾试图检测这样的条款 - 而且它们可能是任意复杂的,所以如果不是不可能的话,一直检测它们是非常困难的。

相反,我建议您重新考虑一下您要做的事情。一些替代方案可能是:通过对数据进行版本控制来记录表的所有更改,或者禁止删除任何行,只需修改应用程序以通过添加“已删除”来删除行。列。