[英]How can I safely give MySQL DELETE power to my script?
我似乎已經為運行一個安全的PHP / MySQL網站而陷入困境。 我創建了一個MySQL用戶,該用戶具有最小的權限來運行該站點,因此沒有DELETE特權,並且一切正常。 最近,我添加了一些擴展程序,以尋找過多的用戶占用過多的資源,並根據IP地址將其禁止使用24/48小時。 這並不完美,但是它阻止了普通用戶的濫用行為。
那也很好。 問題是我的24小時禁令清單在一個表中以驚人的速度增長。 理想情況下,我將擁有一個腳本,該腳本可刪除表中所有其時間戳早於禁止期限的內容,因為不再需要它們。 然后,我可以從cron作業中運行該腳本。
問題在於該腳本失敗,因為用戶帳戶憑據不包含DELETE特權。 如果我創建一個具有DELETE的額外用戶,是否不會損害整個網站的安全性? 有中間方法或其他解決方案,還是我可以采取的一些預防措施。 解決此沖突的最佳方法是什么?
擁有單獨帳戶的全部目的是使您可以為每個帳戶賦予適合其職責的特權。 如果您需要刪除內容,則顯然必須創建一個具有DELETE特權的帳戶。 但這並不能破壞一切,因為所有其他帳戶仍然受到限制。
此外,此帳戶不必具有廣泛的DELETE
特權。 您可以在列出禁令的表中為其授予DELETE
特權。 盡管如果您嘗試對權限進行細粒度的設置,則可能會使自己發瘋。
GRANT DELETE on dbname.bans TO deleter@localhost;
最后,如果您的帳戶具有UPDATE
特權,那么也可以為其授予DELETE
特權。 因為即使它不能刪除行,它仍然可能通過用垃圾替換行來完全弄亂您的數據。
無論如何,如果您不想對應用程序中的任何mysql用戶使用DELETE特權,我都希望使用UPDATE。 每當您的應用程序腳本發現用戶需要禁止而不是寫入新記錄時,都會搜索時間戳最小的第一個被禁止用戶(最早的被禁止用戶)並更新其值。
這是我能想到的最好的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.