數(shù)據(jù)庫(kù)誤刪除案例及建議
案例分享
誤刪除數(shù)據(jù)表
原來(lái)接手一個(gè)部門(mén)的所有數(shù)據(jù)庫(kù),結(jié)果漏了一個(gè),也沒(méi)人告訴我,所以我不知道這個(gè)數(shù)據(jù)庫(kù)存在。一天一個(gè)程序人員誤按了一個(gè)按鈕,把大量的數(shù)據(jù)全部刪除,找到我后,發(fā)現(xiàn)數(shù)據(jù)庫(kù)沒(méi)有歸檔,也沒(méi)有任何備份。結(jié)果是程序人員補(bǔ)了幾天的數(shù)據(jù),獎(jiǎng)金也直接泡湯。
誤刪除用戶(hù)
剛從事DBA不久,可已經(jīng)犯了個(gè)讓我終生難忘的錯(cuò)誤。原本是要將測(cè)試環(huán)境的一個(gè)user給刪掉,由于桌面上開(kāi)了多個(gè)窗口,結(jié)果drop user XXX cascade,直接將正式環(huán)境的一個(gè)user給drop了,剛按下enter,就感覺(jué)怪怪的,心想不會(huì)吧!!已經(jīng)來(lái)不急了,還好這個(gè)user的信息是從另外一臺(tái)服務(wù)器上同步過(guò)來(lái)的,要不然死定了。以后做什么動(dòng)作我都習(xí)慣先看看是在哪個(gè)DB上那個(gè)服務(wù)器上,千萬(wàn)別搞錯(cuò)了。
誤刪除表數(shù)據(jù)
以前公司,有一個(gè)程序員寫(xiě)好的腳本,一個(gè)實(shí)施人員去執(zhí)行,腳本里面帶了 delete * from xxx; commit; 啥備份,歸檔都沒(méi)有。結(jié)果我們公司全部人員出動(dòng),抱著筆記本,臺(tái)式機(jī),去北京某區(qū)縣所有的機(jī)關(guān)單位上門(mén)錄了一星期人員信息。至今記憶猶新。
誤刪除數(shù)據(jù)表
測(cè)試環(huán)境導(dǎo)出的腳本中包含drop語(yǔ)句,結(jié)果看都沒(méi)看就直接在生產(chǎn)環(huán)境中做了,一下子物料表就沒(méi)了,整個(gè)生產(chǎn)停線,后來(lái)做了恢復(fù),丟了半天的數(shù)據(jù)。教訓(xùn):執(zhí)行的腳本一定要認(rèn)真檢查。
參考建議
1.通過(guò)觸發(fā)器約束或禁用特定的DDL操作
對(duì)于TRUNCATE等高風(fēng)險(xiǎn)的數(shù)據(jù)庫(kù)DDL操作,可以考慮通過(guò)觸發(fā)器進(jìn)行禁用,防止未授權(quán)的操作損害數(shù)據(jù)。 很多輕忽的數(shù)據(jù)災(zāi)難都來(lái)自于Truncate,這個(gè)類(lèi)似于系統(tǒng)級(jí)別的rm命令***破壞性,而且DDL不可以回退,即便發(fā)現(xiàn)已經(jīng)為時(shí)過(guò)晚。所以我們建議用戶(hù)可以考慮使用DDL觸發(fā)器來(lái)禁用Truncate之類(lèi)的危險(xiǎn)操作,以達(dá)到安全防范的目的。
2.以最小權(quán)限原則進(jìn)行授權(quán)
過(guò)度授權(quán)即是為數(shù)據(jù)庫(kù)埋下安全隱患,在進(jìn)行用戶(hù)授權(quán)時(shí)一定要遵循最小權(quán)限授予原則,避免因?yàn)檫^(guò)度授權(quán)而帶來(lái)的安全風(fēng)險(xiǎn)。
3.明確用戶(hù)職責(zé)
應(yīng)當(dāng)明確不同的數(shù)據(jù)庫(kù)用戶(hù)能夠用于的工作范圍,應(yīng)當(dāng)使用普通用戶(hù)身份的,就絕對(duì)不應(yīng)該使用DBA的用戶(hù)身份,只有職權(quán)相稱(chēng),才能夠避免錯(cuò)誤。 即便是擁有管理員職責(zé)的用戶(hù),也應(yīng)當(dāng)遵循以不同身份執(zhí)行不同任務(wù)的習(xí)慣,比如SYS和SYSTEM用戶(hù)的使用就應(yīng)當(dāng)進(jìn)行區(qū)分和界定。
4.在任何數(shù)據(jù)破壞之前進(jìn)行備份
在進(jìn)行數(shù)據(jù)表的截?cái)?、刪除之前,進(jìn)行備份,將備份養(yǎng)成一種習(xí)慣,這樣才能夠避免誤操作之后的措手不及。
5.以重命名代替刪除操作
不論操作系統(tǒng)級(jí)別還是數(shù)據(jù)庫(kù)級(jí)別的刪除操作,盡量以重命名替代刪除,如重命名數(shù)據(jù)表,重命名數(shù)據(jù)文件,然后通過(guò)一段時(shí)間的觀察和確認(rèn)后再?gòu)氐讋h除。 Oracle10g中引入的回收站功能,就是將我們執(zhí)行的DROP操作變更為重命名進(jìn)行保護(hù),當(dāng)我們發(fā)現(xiàn)了失誤之后,可以通過(guò)回收站找回,但是注意回收站保存對(duì)象的時(shí)間和空間有關(guān),如果存儲(chǔ)空間不足,對(duì)象會(huì)被自動(dòng)釋放。 我們?cè)诠芾碇薪梃b這個(gè)回收站思想是很有幫助的。
6.盡量爭(zhēng)取充足的時(shí)間
不要低估任何一次簡(jiǎn)單的維護(hù)操作,因?yàn)橐粋€(gè)意外就可能大幅延長(zhǎng)你的維護(hù)時(shí)間。所以,應(yīng)當(dāng)盡量爭(zhēng)取充足的時(shí)間,包括做好充足的準(zhǔn)備工作,加快無(wú)關(guān)緊要步驟的執(zhí)行,減少不必要的時(shí)間消耗,時(shí)間越充裕,你用來(lái)應(yīng)對(duì)可能出現(xiàn)的故障的時(shí)間就越多。
7.審核你的剪貼板
很多錯(cuò)誤是由于粘貼剪貼板的內(nèi)容引起的,所以,當(dāng)你準(zhǔn)備向一個(gè)窗口或者命令行粘貼你看不到的內(nèi)容時(shí),提高你的警惕性。在Windows上,有很多剪貼板增強(qiáng)工具,可以幫助我們記錄和展現(xiàn)剪貼板的內(nèi)容,可以考慮選用。 審核你的剪貼板,確保其中的內(nèi)容是你期望的。
8.沒(méi)有認(rèn)真看過(guò)的腳本就絕不要執(zhí)行
對(duì)于DBA來(lái)說(shuō),如果一個(gè)腳本你從來(lái)沒(méi)有認(rèn)真讀取了解過(guò),就不要去執(zhí)行,腳本中的一個(gè)錯(cuò)誤就可能導(dǎo)致嚴(yán)重的數(shù)據(jù)災(zāi)難。我們遇到過(guò)案例,由于腳本中的一個(gè)變量錯(cuò)誤,導(dǎo)致所有數(shù)據(jù)文件被刪除,教訓(xùn)慘痛。 如果實(shí)在無(wú)法審核腳本的內(nèi)容,那么在進(jìn)行重要操作之前,備份你的數(shù)據(jù)。