摘要:引言數據庫一直是個大問題。那么如果做到防止數據庫誤刪或者是誤更新,可以參考下以下幾點,下面總結的都是業務層面,和一些配置層面。軟刪除的好處也很明顯,如果是業務發現誤刪,還能有回旋的余地。賬號在非必須情況下,盡量不要參與日常運維,維護的工作。
引言
??數據庫一直是個大問題。如果沒有做數據備份,或者是開啟binlog,那真得就是沒了就是沒了,全表更新就是真的回不去了,就算開啟了備份,也很麻煩。光是數據恢復就夠喝一壺的,而且說不影響線上正在跑的業務,那是騙人的。那么如果做到防止數據庫誤刪或者是誤更新,可以參考下以下幾點,下面總結的都是業務層面,和一些配置層面。
防護手段 業務代碼
update delete 盡量不允許where條件為空
ThinkPHP框架where為空導致全表
$whereString = ""; $whereArr = []; $sql1 = M("test")->where($whereString)->buildSql(); $sql2 = M("test")->where($whereArr)->buildSql(); echo $sql1; // SELECT * FROM mall_test echo $sql2; // SELECT * FROM mall_test
分析:
那么問題就很尷尬了。程序員沒好好檢查下where條件,有可能傳了空的字符串或者數組,TP框架源碼我看了下,也僅僅只做了是否有傳參的檢查,這還遠遠不夠
解決思路:
業務代碼中每次where必須檢查,大原則上不允許where為空。數據查詢也不行,不小心掃描全表也造成IO和內網帶寬的開銷
軟刪除代替物理刪除
??這個就是比較常見的手段了,一般是多加一個字段is_delete等等標記狀態的字段,如有必要,再加上刪除時間。軟刪除的好處也很明顯,如果是業務發現誤刪,還能有回旋的余地。又或者,在一些線上業務中,比如說可以多一個功能,比如說用戶是VIP,可以恢復以前刪除的文章或者是圖片等等,看似很厲害,很貼心,其實就是改變刪除狀態而已。
啟動參數限制更新必須有條件(這里以mysql為例)
-U, --safe-updates Only allow UPDATE and DELETE that uses keys.
其實UPDATE更新表也要注意防止全表更新,因為更新也產生了不可逆的結果。
grant配置權限
分配的用戶應該滿足最小可用權限。比如WEB應用的操作數據庫賬號。root賬號在非必須情況下,盡量不要參與日常運維,維護的工作。勤于多多分配賬號。權限的話也要控制好,比如你開放DROP TURNCATE等等這些危險命令干嘛。如果是用了軟刪除的邏輯,那么DELETE應該也不允許開放
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/17763.html
閱讀 3229·2021-11-11 16:55
閱讀 2490·2021-10-13 09:39
閱讀 2424·2021-09-13 10:27
閱讀 2163·2019-08-30 15:55
閱讀 3088·2019-08-30 15:54
閱讀 3133·2019-08-29 16:34
閱讀 1827·2019-08-29 12:41
閱讀 1072·2019-08-29 11:33