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