Php 如何安全地将MySQL删除功能赋予脚本?

Php 如何安全地将MySQL删除功能赋予脚本?,php,mysql,security,Php,Mysql,Security,为了运行一个安全的PHP/MySQL站点,我似乎把自己逼到了绝境。我创建了一个MySQL用户,该用户运行站点的权限最小,因此没有删除权限,而且一切正常。最近,我添加了一些扩展,以查找占用过多资源的过度用户,并根据IP地址在24/48小时内禁止这些扩展。虽然不完美,但它阻止了普通用户的过度滥用 那也行。问题是我的24小时禁令列表以惊人的速度增长。理想情况下,我会有一个脚本,删除表中时间戳早于禁止期的所有内容,因为它们不再需要。然后我可以从cron作业运行该脚本 问题是该脚本失败,因为用户帐户凭据不

为了运行一个安全的PHP/MySQL站点,我似乎把自己逼到了绝境。我创建了一个MySQL用户,该用户运行站点的权限最小,因此没有删除权限,而且一切正常。最近,我添加了一些扩展,以查找占用过多资源的过度用户,并根据IP地址在24/48小时内禁止这些扩展。虽然不完美,但它阻止了普通用户的过度滥用

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


问题是该脚本失败,因为用户帐户凭据不包括删除权限。如果我创建了一个有删除权限的额外用户,我不是在破坏整个网站的安全吗?是否有一个折衷的方法或其他解决方案,或只是一些预防措施,我可以采取。解决这一冲突的最佳方式是什么

拥有独立帐户的全部意义在于,您可以为每个帐户赋予与其职责相适应的特权。如果需要删除内容,显然必须创建具有删除权限的帐户。但这并没有破坏一切,因为所有其他账户仍然受到限制

此外,此帐户不必具有广泛的
DELETE
权限。您只需在列出禁令的表中授予它删除的权限即可。尽管如果您试图对权限进行过于细粒度的处理,可能会让自己发疯

GRANT DELETE on dbname.bans TO deleter@localhost;

最后,如果您有一个拥有
UPDATE
特权的帐户,那么允许它同时拥有
DELETE
特权也没那么糟糕。因为即使它不能删除行,它仍然可能通过用垃圾替换行来完全破坏您的数据。

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


这是我能想到的最好的了。

那么你认为拥有一个“安全”网站的唯一方法就是没有人拥有删除权限吗?@juergen d不,我没有说过这样的话。我不说绝对的话,也从不使用类似的短语“唯一的办法”。事实上,我的措辞显然是试探性的。我对自己的信仰持轻率态度。你应该紧紧抓住人们说的话,谢谢你。我不知道我可以将删除权限绑定到单个表。关于那件事,我还没能了解多少。我想知道你是否知道一个可以为初学者提供实用指南的在线资源?这听起来很理想,因为如果整张桌子被意外或恶意地擦干净,那就不会是一场灾难。我也遵循你关于更新的逻辑。谢谢。你看过格兰特的语法了吗?当您授予权限时,您会说
grant ON dbname.tablename TO username
。您可以将
tablename
替换为
*
以表示数据库中的所有表,但也可以指定一个表。谢谢-我将研究该表,并在可能的情况下实现它(我仅限于通过ISP的控制面板所能做的事情)。谢谢Barmar。这不是唯一的解决方案(尽管它是这样提出的)。您可以指定存储过程以与调用它的用户不同的权限运行(SQL安全性{DEFINER | INVOKER})。调用程序仍然需要执行权限。感谢您周到的回复。然而,我认为Barmar有一个观点,即更新和删除一样具有潜在的破坏性。无论如何,我感谢你的贡献。