如何安全地为我的脚本提供MySQL DELETE功能?

时间:2014-08-29 11:49:42

标签: php mysql security

我似乎已经把自己画成了一个角落,我努力运行一个安全的PHP / MySQL网站。我创建了一个MySQL用户,它具有运行网站的最小权限,因此没有DELETE权限等等,而且一切正常。最近,我添加了扩展,寻找过多的用户占用太多资源,我根据IP地址禁止他们24/48小时。不完美,但它阻止了普通用户过多的滥用。

这也很好。问题是我的24小时禁令清单位于一个以惊人的速度增长的表格中。理想情况下,我有一个脚本可以删除表中时间戳早于禁止期的所有内容,因为它们不再需要。然后我可以从一个cron作业运行该脚本。

问题是该脚本失败,因为用户帐户凭据不包含DELETE权限。如果我创建了一个确实有DELETE的额外用户,那么我不是在破坏整个网站的安全性吗?是否有中间路线或其他解决方案,或者只是我可以采取的一些预防措施。解决这场冲突的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

拥有单独帐户的重点是,您可以为每个帐户提供适合其职责的权限。如果您需要删除内容,则显然必须创建具有DELETE权限的帐户。但这并不会破坏一切,因为所有其他账户仍然受到限制。

此外,此帐户不必拥有广泛的DELETE权限。您可以在列出禁令的表中授予DELETE特权。虽然如果你试图通过权限过细,你可能会让自己变得疯狂。

GRANT DELETE on dbname.bans TO deleter@localhost;

最后,如果您的帐户具有UPDATE权限,那么允许DELETE权限并不是那么糟糕。因为即使它不能删除行,它仍然可以通过用垃圾替换行来完全搞乱你的数据。

答案 1 :(得分:0)

如果在任何情况下你不想对你的应用程序中的任何mysql用户使用DELETE权限,我宁愿使用UPDATE。只要您的应用程序脚本发现用户需要禁止而不是写入新记录,就会搜索具有最小时间戳(最早被禁用户)的第一个被禁用户并更新其值。

这是我能想到的最好的。