天天看點

DBA生存警示:防範頻發的資料誤删除操作

編輯手記:對于資深的老dba們,他們在漫長的職業生涯中養成了很多稀奇古怪的守則,以在複雜多變的環境中“幸存”,這源于無數血淚的教訓,我曾經在《資料安全警示錄》一書收錄了大量現實案例,現在整理分享給大家,共為警示。

DBA生存警示:防範頻發的資料誤删除操作

在資料庫日常管理過程中,有些威脅來自資料庫外部,而有些威脅則來自資料庫内部,對于資料庫外部,破壞性的操作有rm,而在資料庫内部,同樣有破壞性操作,如truncate。

案例分享

誤删除資料表

原來接手一個部門的所有資料庫,結果漏了一個,也沒人告訴我,是以我不知道這個資料庫存在。一天一個程式人員誤按了一個按鈕,把大量的資料全部删除,找到我後,發現資料庫沒有歸檔,也沒有任何備份。結果是程式人員補了幾天的資料,我的獎金也直接泡湯。

誤删除使用者

剛從事dba不久,可已經犯了個讓我終生難忘的錯誤。原本是要将測試環境的一個user給删掉,由于桌面上開了多個視窗,結果drop user xxx cascade,直接将正式環境的一個user給drop了,剛按下enter,就感覺怪怪的,心想不會吧!!已經來不急了,還好這個user的資訊是從另外一台伺服器上同步過來的,要不然死定了。以後做什麼動作我都習慣先看看是在哪個db上那個伺服器上,千萬别搞錯了。

誤删除表資料

以前公司,有一個程式員寫好的腳本,一個實施人員去執行,腳本裡面帶了 delete * from xxx; commit; 啥備份,歸檔都沒有。結果我們公司全部人員出動,抱着筆記本,桌上型電腦,去北京某區縣所有的機關機關上門錄了一星期人員資訊。至今記憶猶新。

測試環境導出的腳本中包含drop語句,結果看都沒看就直接在生產環境中做了,一下子物料表就沒了,整個生産停線,後來做了恢複,丢了半天的資料。教訓:執行的腳本一定要認真檢查。

防範建議

1.通過觸發器限制或禁用特定的ddl操作

對于truncate等高風險的資料庫ddl操作,可以考慮通過觸發器進行禁用,防止未授權的操作損害資料。 很多輕忽的資料災難都來自于truncate,這個類似于系統級别的rm指令極具破壞性,而且ddl不可以回退,即便發現已經為時過晚。是以我們建議使用者可以考慮使用ddl觸發器來禁用truncate之類的危險操作,以達到安全防範的目的。

2.以最小權限原則進行授權

過度授權即是為資料庫埋下安全隐患,在進行使用者授權時一定要遵循最小權限授予原則,避免因為過度授權而帶來的安全風險。

3.明确使用者職責

應當明确不同的資料庫使用者能夠用于的工作範圍,應當使用普通使用者身份的,就絕對不應該使用dba的使用者身份,隻有職權相稱,才能夠避免錯誤。 即便是擁有管理者職責的使用者,也應當遵循以不同身份執行不同任務的習慣,比如sys和system使用者的使用就應當進行區分和界定。

4.在任何資料破壞之前進行備份

在進行資料表的截斷、删除之前,進行備份,将備份養成一種習慣,這樣才能夠避免誤操作之後的措手不及。

5.以重命名代替删除操作

不論作業系統級别還是資料庫級别的删除操作,盡量以重命名替代删除,如重命名資料表,重命名資料檔案,然後通過一段時間的觀察和确認後再徹底删除。 oracle10g中引入的資源回收筒功能,就是将我們執行的drop操作變更為重命名進行保護,當我們發現了失誤之後,可以通過資源回收筒找回,但是注意資源回收筒儲存對象的時間和空間有關,如果存儲空間不足,對象會被自動釋放。 我們在管理中借鑒這個資源回收筒思想是很有幫助的。

6.盡量争取充足的時間

不要低估任何一次簡單的維護操作,因為一個意外就可能大幅延長你的維護時間。是以,應當盡量争取充足的時間,包括做好充足的準備工作,加快無關緊要步驟的執行,減少不必要的時間消耗,時間越充裕,你用來應對可能出現的故障的時間就越多。

7.稽核你的剪貼闆

很多錯誤是由于粘貼剪貼闆的内容引起的,是以,當你準備向一個視窗或者指令行粘貼你看不到的内容時,提高你的警惕性。在windows上,有很多剪貼闆增強工具,可以幫助我們記錄和展現剪貼闆的内容,可以考慮選用。 稽核你的剪貼闆,確定其中的内容是你期望的。

8.沒有認真看過的腳本就絕不要執行

對于dba來說,如果一個腳本你從來沒有認真讀取了解過,就不要去執行,腳本中的一個錯誤就可能導緻嚴重的資料災難。我們遇到過案例,由于腳本中的一個變量錯誤,導緻所有資料檔案被删除,教訓慘痛。 如果實在無法稽核腳本的内容,那麼在進行重要操作之前,備份你的資料。

以上内容摘錄自蓋國強《oracledba手記4資料安全警示錄》。