羅紅飛
浙江商業(yè)職業(yè)技術學院應用工程學院 浙江 310053
目前Oracle的自帶的權限管理和控制還不夠靈活,而且對于數據的誤刪除、誤清空等的操作,無法進行有效和及時的恢復,不能滿足有些用戶對Oracle數據庫的需要。本系統(tǒng)的重點在于解決上述的幾個關鍵問題,為Oracle數據庫的用戶,提供了更加安全、有效的數據管理和恢復,也為企業(yè)的核心業(yè)務數據上了雙保險。
傳統(tǒng)的模式是用戶直接操作數據庫內部的表等相關信息,本系統(tǒng)擬在用戶和數據庫之間架構一個“層”,該層包括“權限控制”、“數據恢復”、“系統(tǒng)管理”三大功能模塊,其總體架構圖如圖1所示,用戶通過UI界面輸入數據,spring將從UI界面中獲得的數據根據三大功能模塊進行處理,實現相應的數據配置,最后通過觸發(fā)器和存儲過程作用于數據庫,下面按順序分模塊介紹。
圖1 系統(tǒng)總體架構圖
在具體實現過程中,擬用Extjs實現展現給用戶的User Interface,提供用戶對權限控制和數據控制等的增刪改操作,因ExtJs在使用的方式上,不同于普通的html語言,它充分融入了面向對象的思想,做了很多封裝,利用ExtJs實現表格,加載數據,方便直觀。根據具體需求,畫出實現框圖如圖2。
圖2 ExtJs實現UI界面原理框圖
圖3 spring進行數據配置的代碼原理圖
ExtJs把數據從UI界面提交給了Web Server以后,利用Spring,更好地對數據進行面向對象的封裝,然后以面向對象的方式保存到數據庫中,同時對于異常情況發(fā)生的時候,Spring能及時提供事務的回滾,保證數據的一致性,杜絕數據庫中臟數據的產生,過程實現框圖如圖3。
根據具體使用需求,權限控制應包括DDL權限控制、DML權限控制和表空間管理。DDL權限控制主要為了更加靈活地控制用戶操作數據庫對象的權限,特別是表,因為表是數據存儲的核心對象,非常重要。DML權限控制的實現是通過存儲過程動態(tài)地去創(chuàng)建觸發(fā)器,來控制用戶是否能夠對表進行插入、刪除和修改的操作,表空間的管理主要提供的是對表空間的刪除等危險操作,確保操作能夠被授權,同時誤操作后能夠被恢復,對操作的所有記錄能夠通過日志進行查看。
(1) DDL權限控制的實現
Oracle提供了grant的命令,能夠對用戶賦予某種權限,例如:
SQL>grant create table on user1,這個就是允許用戶user1可以創(chuàng)建表,但是有些需求卻不能滿足,例如我們要求user1用戶只能drop tmp開頭的table,不能drop 其他名字的表,這個在實際的業(yè)務系統(tǒng)中也是比較常見的,Oracle目前還沒有類似支持正則表達式這樣的grant命令,本系統(tǒng)就是為了解決這樣一些問題。具體思路是,首先,創(chuàng)建一張表,叫Tor$DDL_Privs,這張表的作用,就是保存DDL權限控制的各個模塊,如表1所示。
表1 權限控制表
TOR$DDL_PRIVS表里,添加了記錄以后,如何才能生效呢,這就需要從實現過程上來詳細地進行分析,例如,我們限制了Test用戶 Create portal* 的table的權限,也就是說,Test用戶沒有辦法創(chuàng)建以portal開頭的表名稱,如果Test去執(zhí)行了,就會收到提示:你無法執(zhí)行該操作,這個過程將由觸發(fā)器結合業(yè)務邏輯過程實現,實現框圖如圖4所示。
ora_sysevent等這些是由trigger自動捕獲的,是有值的
ora_sysevent=create
ora_dict_obj_owner=test
ora_dict_obj_type=table
ora_dict_obj_name=portal1
有了這些值后,我們在存儲過程里,就可以做出相應的邏輯處理。
圖4 DDL權限控制原理圖
(2) ML權限控制的實現
DML權限控制主要是用來限制用戶操作表的,關心的是表的數據,根據實際情況禁止用戶插入和刪除某些表,實現方式主要分兩步,創(chuàng)建存儲過程、創(chuàng)建動態(tài)觸發(fā)器。例如限制sys用戶,向portal1表中插入、更新、刪除數據,如圖5所示:具體包括:a、動態(tài)創(chuàng)建觸發(fā)器;b、存儲函數判斷。
圖5 DML權限控制原理圖
(3) 表空間管理
表空間是Oracle數據庫中非常重要的一個對象,表空間的刪除屬于非常危險的操作,本系統(tǒng)擬把Oracle自帶的表空間刪除操作進行屏蔽,把真正的表空間刪除操作放到系統(tǒng)中來。具體做法是:令觸發(fā)器在表空間刪除之前,做以下工作:
a、判斷是否表空間為只讀,如果不是只讀,則提示失敗;
b、如果用戶確實有drop tablespace的權限,則繼續(xù);
c、執(zhí)行存儲過程,導出dmp文件,并且把dmp文件名保存到表TOR$DATAFILES,以備后續(xù)恢復。
數據恢復模塊主要包括DDL數據恢復和DML數據恢復。
(1) DDL數據恢復的實現
實現方法是用一個表TOR$DDL_RECOVE_CONF,記錄了用戶需要對哪些表,在被drop或者truncate以后,數據能夠恢復回來的,當然了,首先是該用戶在權限控制里面,不應該被限制drop或者truncate table,否則,該操作根本就不能成功,恢復也就沒有必要了。表恢復的數據是來自于drop或truncate的操作之前,由trigger把該數據寫入到臨時表中的,如圖6所示。
臨時表數據多了,當然要清空,清空臨時表擬分為手動清空、自動清空。自動清空默認是1個月執(zhí)行一次,手動清空則可以選擇性地進行清空數據。
圖6 表恢復原理圖
(2) DML數據恢復實現
在表TOR$DML_TABLE_RECV里保存DML數據的恢復配置,記錄了用戶需要對哪些用戶的那些表進行DML恢復,主要也是通過創(chuàng)建動態(tài)觸發(fā)器來實現的,在用戶進行DML操作之前,由觸發(fā)器記錄當前的SCN的值,記錄到表TOR$DML_LOG中,以備將來的恢復用,實現框圖如圖7所示。
在實際的業(yè)務系統(tǒng)中,考慮到DML操作是非常頻繁的,如果要對這些所有DML操作都進行記錄的話,TOR$DML_LOG里面的記錄會非常龐大,而且恢復的復雜度會大大提高,因此,我們需要提供信任IP的功能來供用戶填寫。信任IP是一個IP列表,里面一般填寫的是,我們信任的,可以對數據庫的某些關鍵業(yè)務表進行DML操作的機器IP,例如數據庫管理員的機器的IP地址等。觸發(fā)器一旦檢測到是這些機器做的操作,它就不會把數據存入TOR$DML_LOG中去。
圖7 DML數據恢復原理圖
Oracle中的互保護技術,就是仿照木馬程序中的雙進程保護的原理,通過兩個觸發(fā)器,互相之間進行保護,同時利用了Java當中的加密技術,對于某個令牌進行加密和解密,如果令牌值相同的話,兩個觸發(fā)器就同時失效,這樣,我們的系統(tǒng)保護就能夠正常關閉掉,而想通過人為的方式直接去drop觸發(fā)器的操作,是無效的。如圖8所示。
圖8 互觸發(fā)保護原理圖
目前我們開發(fā)的擴展改進系統(tǒng)總體運行情況良好,達到了預期的效果。從系統(tǒng)的穩(wěn)定性、安全性、靈活性及易用性四個方面進行了測試。
系統(tǒng)運行前后的情況對比電腦各項指標對比見表2。
表2 本系統(tǒng)安裝前后電腦各項指標對比
通過安裝系統(tǒng)使用前后的對比情況統(tǒng)計,基本上對業(yè)務沒有任何的影響。
由于本系統(tǒng)采用了巧妙的雙觸發(fā)保護機制,使得本身的保護程序比較難被卸載,同時,觸發(fā)器的實時性保護性,對于數據的保護比較及時。采用二種測試方法加以檢驗。
測試方法1:SYS用戶對系統(tǒng)本身的各種卸載和破壞操作。
表3統(tǒng)計了SYS用戶對系統(tǒng)本身的各種卸載和破壞操作的情況。
表3 SYS用戶對系統(tǒng)本身的各種卸載和破壞操作的情況
測試方法2:通過書寫具體的壓力測試程序。
通過書寫具體的壓力測試程序,對于test用戶下的table1表進行truncate操作,觀察其保護功能。測試結果如表4所示。
表4 壓力測試情況(基于table1的truncate操作)
系統(tǒng)通過靈活的權限配置方式,能夠執(zhí)行類似正則表達式的通配符匹配權限,對Oracle權限進行了擴充,使得用戶使用更加得心應手,同時程序本身支持啟動/關閉,垃圾自動清理、自動數據備份和導出等的功能,作為業(yè)務系統(tǒng)的補充,顯得非常靈活。
系統(tǒng)的B/S架構的模式,界面友好,華麗,使用方便,無須安裝額外的客戶端,支持當前任何版本的瀏覽器,包括IE6.0,IE7.0,IE8.0,FireFox,Opera,Chrome,Safari等的瀏覽器。
[1] 康諾利.數據庫系統(tǒng)——設計、實現與管理(第三版)英文版.北京:電子工業(yè)出版社.2003.
[2] MarleneTheriaul,RachelCarmieae,JameSVISCusi(美)著,王蘭成等譯.Oracle數據庫管理員基礎教程.北京:機械工業(yè)出版社.2000.
[3] KevinLoney,Marlene Thierault.Oracle 9iDBA Handbook.oracle Press.1999.
[4] Oracle公司.Oracle Streams技術白皮書.ORACLE公司.2002.
[5] 王春曉.基于數據庫復制技術的公安機關固定資產匯總系統(tǒng).碩士學位論文.北京化工大學.2008.
[6] 王彬,代彥波,顏鵬博.Oracle 10g簡明教程.北京:清華大學出版社.2006.