成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Web開發(fā)經(jīng)驗(yàn)(1)防止MySQL數(shù)據(jù)庫誤更新/刪除

keke / 1165人閱讀

摘要:引言數(shù)據(jù)庫一直是個(gè)大問題。那么如果做到防止數(shù)據(jù)庫誤刪或者是誤更新,可以參考下以下幾點(diǎn),下面總結(jié)的都是業(yè)務(wù)層面,和一些配置層面。軟刪除的好處也很明顯,如果是業(yè)務(wù)發(fā)現(xiàn)誤刪,還能有回旋的余地。賬號(hào)在非必須情況下,盡量不要參與日常運(yùn)維,維護(hù)的工作。

引言

??數(shù)據(jù)庫一直是個(gè)大問題。如果沒有做數(shù)據(jù)備份,或者是開啟binlog,那真得就是沒了就是沒了,全表更新就是真的回不去了,就算開啟了備份,也很麻煩。光是數(shù)據(jù)恢復(fù)就夠喝一壺的,而且說不影響線上正在跑的業(yè)務(wù),那是騙人的。那么如果做到防止數(shù)據(jù)庫誤刪或者是誤更新,可以參考下以下幾點(diǎn),下面總結(jié)的都是業(yè)務(wù)層面,和一些配置層面。

防護(hù)手段 業(yè)務(wù)代碼

update delete 盡量不允許where條件為空

ThinkPHP框架where為空導(dǎo)致全表

    $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條件,有可能傳了空的字符串或者數(shù)組,TP框架源碼我看了下,也僅僅只做了是否有傳參的檢查,這還遠(yuǎn)遠(yuǎn)不夠

解決思路:
業(yè)務(wù)代碼中每次where必須檢查,大原則上不允許where為空。數(shù)據(jù)查詢也不行,不小心掃描全表也造成IO和內(nèi)網(wǎng)帶寬的開銷

軟刪除代替物理刪除
??這個(gè)就是比較常見的手段了,一般是多加一個(gè)字段is_delete等等標(biāo)記狀態(tài)的字段,如有必要,再加上刪除時(shí)間。軟刪除的好處也很明顯,如果是業(yè)務(wù)發(fā)現(xiàn)誤刪,還能有回旋的余地。又或者,在一些線上業(yè)務(wù)中,比如說可以多一個(gè)功能,比如說用戶是VIP,可以恢復(fù)以前刪除的文章或者是圖片等等,看似很厲害,很貼心,其實(shí)就是改變刪除狀態(tài)而已。

數(shù)據(jù)庫配置

啟動(dòng)參數(shù)限制更新必須有條件(這里以mysql為例)
-U, --safe-updates Only allow UPDATE and DELETE that uses keys.
其實(shí)UPDATE更新表也要注意防止全表更新,因?yàn)楦乱伯a(chǎn)生了不可逆的結(jié)果。

grant配置權(quán)限
分配的用戶應(yīng)該滿足最小可用權(quán)限。比如WEB應(yīng)用的操作數(shù)據(jù)庫賬號(hào)。root賬號(hào)在非必須情況下,盡量不要參與日常運(yùn)維,維護(hù)的工作。勤于多多分配賬號(hào)。權(quán)限的話也要控制好,比如你開放DROP TURNCATE等等這些危險(xiǎn)命令干嘛。如果是用了軟刪除的邏輯,那么DELETE應(yīng)該也不允許開放

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/17763.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<