隨著計算機的普及以及網絡的發展,數據庫已經不再僅僅是那些程序員所專有的話題。Oracle數據庫更是憑借其性能卓越、操作方便靈活的特點,在數據庫的市場中已經占據了一席之地。
但是,隨著網絡技術的不斷進步,數據信息的不斷增加,數據安全也已經不再是以前的“老生長談”,更不是以前書本上那些“可望而不可及”的條條框框。
或許很久以前,大家都覺得Oracle數據庫的安全並不存在隱患,因為Oracle公司在2003年11月份開始促銷其數據庫軟件時提出的口號是“只有Oracle9i能夠做到絕對安全”。
但是不管它這麼說是為了促銷,還是為了擴大知名度,這口號提出僅一個月後,英國的安全專家 David LitchfIEld就發現的9iAS中存在的程序錯誤導致緩沖溢出漏洞。後來,PenTest Limited和 eEye Digital Security各自提出了一個小的漏洞,所有使用Oracle公司產品的人都不由地緊張了原本松弛的大腦——對於用戶來說,畢竟是關系到了“身家性命”。
下面筆者將帶著大家走進Oracle數據安全的世界。
一、Oracle數據庫的一些基本常識
這裡僅僅是為了以後的安全奠定一些基礎,因為我們後面要用到它們。
1. Oracle所包含的組件
Oracle數據庫是指整個Oracle RDBMS環境,它包括以下組件:
·Oracle 數據庫進程和緩沖(實例)
·SYSTEM 表空間包含一個集中系統類目,它可以由一個或多個數據文件構成
·其它由數據庫管理員(DBA)(可選)定義的表空間,每個都由一個或多個數據文件構成
·兩個以上的聯機恢復日志
·歸檔恢復日志(可選)
·其它文件(控制文件、Init.ora、Config.ora 等)
每個 Oracle 數據庫都在一個中央系統類目和數據字典上運行,它位於SYSTEM 表空間
2. 關於“日志”
Oracle數據庫使用幾種結構來保護數據:數據庫後備、日志、回滾段和控制文件。下面我們將大體上了解一下作為主要結構之一的“日志”:
每一個Oracle數據庫實例都提供日志,記錄數據庫中所作的全部修改。每一個運行的Oracle數據庫實例相應地有一個在線日志,它與Oracle後台進程LGWR一起工作,立即記錄該實例所作的全部修改。歸檔(離線)日志是可選擇的,一個Oracle數據庫實例一旦在線日志填滿後,可形成在線日志歸檔文件。歸檔的在線日志文件被唯一標識並合並成歸檔日志。
·在線日志:一個Oracle數據庫的每一實例有一個相關聯的在線日志。一個在線日志由多個在線日志文件組成。在線日志文件(online redo log file)填入日志項(redo entry),日志項記錄的數據用於重構對數據庫所作的全部修改。
·歸檔日志:Oracle要將填滿的在線日志文件組歸檔時,則要建立歸檔日志(archived redo log)。其對數據庫備份和恢復的用處如下:a. 數據庫後備以及在線和歸檔日志文件,在操作系統和磁盤故障中可保證全部提交的事物可被恢復。b. 在數據庫打開和正常系統使用下,如果歸檔日志是永久保存,在線後備可以進行和使用。
數據庫可運行在兩種不同方式下:NOARCHIVELOG方式或ARCHIVELOG方式。數據庫在NOARCHIVELOG方式下使用時,不能進行在線日志的歸檔。如果數據庫在ARCHIVELOG方式下運行,可實施在線日志的歸檔。
3. 物理和邏輯存儲結構
Oracle RDBMS是由表空間組成的,而表空間又是由數據文件組成的。表空間數據文件被格式化為內部的塊單位。塊的大小,是由DBA在Oracle第一次創建的時候設置的,可以在512到8192個字節的范圍內變動。
當一個對象在Oracle表空間中創建的時候,用戶用叫做長度的單位(初始長度(initial extent)、下一個長度(next extent)、最小長度(min extents)以及最大長度(max extents))來標明該對象的空間大小。一個Oracle長度的大小可以變化,但是要包含一個由至少五個連續的塊構成的鏈。