隨著計算機的普及以及網絡的發展數據庫已經不再僅僅是那些程序員所專有的話題而Oracle數據庫更是憑借其性能卓越操作方便靈活的特點在數據庫的市場中已經占據了一席之地但是同樣隨著網絡技術的不斷進步數據信息的不斷增加數據安全已經不再是以前的老生長談也更不是以前書本上那些可望不可及的條條框框
或許很久以前大家都覺得Oracle數據庫的安全並不存在隱患因為Oracle公司在去年月份開始促銷其數據庫軟件時提出的口號是只有Oraclei能夠做到絕對安全但是不管它這麼說是為了促銷還是為了擴大知名度總之伴去年 月份英國的安全專家 David Litchfield 發現的iAS 中存在的程序錯誤導致的緩沖溢出漏洞以及後來PenTest Limited 和 eEye Digital Security 各自提出了一個小的漏洞所有使用Oracle公司產品的人都不由地緊張了原本松弛的大腦這個對於用戶來說畢竟關系到了自己的身家性命
下面筆者將帶著大家走進Oracle數據安全的世界由於筆者水平有限所以不足之處在所難免望大家不吝賜教
(一)Oracle數據庫的一些基本常識
這裡僅僅是為了以後的安全奠定一些基礎因為我們後面要用到它們呵呵~!
Oracle所包含的組件
在 Oracle數據庫是指整個 Oracle RDBMS 環境它包括以下組件
·Oracle 數據庫進程和緩沖(實例)
·SYSTEM 表空間包含一個集中系統類目它可以由一個或多個數據文件構成
·其它由數據庫管理員 (DBA)(可選)定義的表空間每個都由一個或多個數據文件構成
·兩個以上的聯機恢復日志
·歸檔恢復日志(可選)
·其它文件(控制文件InitoraConfigora 等)
每個 Oracle 數據庫都在一個中央系統類目和數據字典上運行它位於SYSTEM 表空間
關於日志
Oracle數據庫使用幾種結構來保護數據數據庫後備日志回滾段和控制文件下面我們將大體上了解一下作為主要結構之一的日志
每一個Oracle數據庫實例都提供日志記錄數據庫中所作的全部修改每一個運行的Oracle數據庫實例相應地有一個在線日志它與Oracle後台進程LGWR一起工作立即記錄該實例所作的全部修改歸檔(離線)日志是可選擇的一個Oracle數據庫實例一旦在線日志填滿後可形成在線日志歸檔文件歸檔的在線日志文件被唯一標識並合並成歸檔日志
·關於在線日志一個Oracle數據庫的每一實例有一個相關聯的在線日志一個在線日志由多個在線日志文件組成在線日志文件(online redo log file)填入日志項(redo entry)日志項記錄的數據用於重構對數據庫所作的全部修改
·關於歸檔日志Oracle要將填滿的在線日志文件組歸檔時則要建立歸檔日志(archived redo log)其對數據庫備份和恢復有下列用處
<>數據庫後備以及在線和歸檔日志文件在操作系統和磁盤故障中可保證全部提交的事物可被恢復
<>在數據庫打開和正常系統使用下如果歸檔日志是永久保存在線後備可以進行和使用
數據庫可運行在兩種不同方式下NOARCHIVELOG方式或ARCHIVELOG 方式數據庫在NOARCHIVELOG方式下使用時不能進行在線日志的歸檔如果數據庫在ARCHIVELOG方式下運行可實施在線日志的歸檔
物理和邏輯存儲結構
Oracle RDBMS是由表空間組成的而表空間又是由數據文件組成的表空間數據文件被格式化為內部的塊單位塊的大小是由DBA在Oracle第一次創建的時候設置的可以在到個字節的范圍內變動當一個對象在Oracle表空間中創建的時候用戶用叫做長度的單位(初始長度((initial extent)下一個長度(next extent)最小長度(min extents)以及最大長度(max extents))來標明該對象的空間大小一個Oracle長度的大小可以變化但是要包含一個由至少五個連續的塊構成的鏈
(二)Oracle數據安全的維護
記得某位哲學家說過事物的變化離不開內因和外因那麼對於Oracle數據安全這個話題而言也勢必分為內和外兩個部分那麼好我們就先從內開始說起
從Oracle系統本身說起
我們先拋開令人聞風色變的hacker和其他一些外部的原因先想一下我們的數據庫什麼硬盤損壞什麼軟件受損什麼操作事物……一系列由於我們的疏忽而造成的系統問題就完全可以讓我們辛苦建立的數據庫中的數據一去不復返那麼我們就先從自己身上找找原因吧
【一】解決系統本身問題的方法數據庫的備份及恢復
·數據庫的備份
關於Oracle數據庫的備份標准地有三中辦法導出/導入(Export/Import)冷備份熱備份導出備份是一種邏輯備份冷備份和熱備份是物理備份
<>導出/導入(Export/Import)
利用Export可將數據從數據庫中提取出來利用Import則可將提取出來的數據送回Oracle數據庫中去
a簡單導出數據(Export)和導入數據(Import)
Oracle支持三種類型的輸出
()表方式(T方式)將指定表的數據導出
()用戶方式(U方式)將指定用戶的所有對象及數據導出
()全庫方式(Full方式)將數據庫中的所有對象導出
數據導出(Import)的過程是數據導入(Export)的逆過程它們的數據流向不同
b增量導出/導入
增量導出是一種常用的數據備份方法它只能對整個數據庫來實施並且必須作為SYSTEM來導出在進行此種導出時系統不要求回答任何問題導出文件名缺省為exportdmp如果不希望自己的輸出文件定名為exportdmp必須在命令行中指出要用的文件名
增量導出包括三個類型
()完全增量導出(Complete)
即備份整個數據庫比如
$exp system/manager inctype=complete file=dmp
()增量型增量導出
備份上一次備份後改變的數據比如
$exp system/manager inctype=incremental file=dmp
()累計型增量導出(Cumulative)
累計型導出方式只是導出自上次完全 導出之後數據庫中變化了的信息比如
$exp system/manager inctype=cumulative file=dmp
數據庫管理員可以排定一個備份日程表用數據導出的三個不同方式合理高效地完成比如數據庫的備份任務可作如下安排
·星期一完全導出(A)
·星期二增量導出(B)
·星期三增量導出(C)
·星期四增量導出(D)
·星期五累計導出(E)
·星期六增量導出(F)
·星期日增量導出(G)
如果在星期日數據庫遭到意外破壞數據庫管理員可按以下步驟來恢復數據庫
第一步用命令CREATE DATABASE重新生成數據庫結構
第二步創建一個足夠大的附加回段
第三步完全增量導入A
$imp system/manager inctype= RECTORE FULL=Y FILE=A
第四步累計增量導入E
$imp system/manager inctype= RECTORE FULL=Y FILE =E
第五步最近增量導入F
$imp system/manager inctype=RESTORE FULL=Y FILE=F
<>冷備份
冷備份發生在數據庫已經正常關閉的情況下當正常關閉時會提供給我們一個完整的數據庫冷備份是將關鍵性文件拷貝到另外位置的一種說法對於備份Oracle信息而言冷備份是最快和最安全的方法冷備份的優點是
·是非常快速的備份方法(只需拷貝文件)
·容易歸檔(簡單拷貝即可)
·容易恢復到某個時間點上(只需將文件再拷貝回去)
·能與歸檔方法相結合作數據庫最新狀態的恢復
·低度維護高度安全
但冷備份也有如下不足
·單獨使用時只能提供到某一時間點上的恢復
·在實施備份的全過程中數據庫必須要作備份而不能作其它工作也就是說在冷備份過程中數據庫必須是關閉狀態
·若磁盤空間有限只能拷貝到磁帶等其它外部存儲設備上速度會很慢
·不能按表或按用戶恢復
如果可能的話(主要看效率)應將信息備份到磁盤上然後啟動數據庫(使用戶可以工作)並將所備份的信息拷貝到磁帶上(拷貝的同時數據庫也可以工作)冷備份中必須拷貝的文件包括
·所有數據文件
·所有控制文件
·所有聯機REDO LOG文件
·Initora文件(可選)
值得注意的是冷備份必須在數據庫關閉的情況下進行當數據庫處於打開狀態時執行數據庫文件系統備份是無效的
下面是做冷備份的完整例子
() 關閉數據庫$sqldba lmode=y
SQLDBA >connect internal;
SQLDBA >shutdown normal;
() 用拷貝命令備份全部的時間文件重做日志文件控制文件初始化參數文件
SQLDBA >! cp < file > < backup directory >
() 重啟Oracle數據庫
$sqldba lmode=y
SQLDBA >connect internal;
SQLDBA >startup;
<>熱備份
熱備份是在數據庫運行的情況下采用archivelog mode方式備份數據的方法所以如果你有昨天夜裡的一個冷備份而且又有今天的熱備份文件在發生問題時就可以利用這些資料恢復更多的信息熱備份要求數據庫在Archivelog方式下操作並需要大量的檔案空間一旦數據庫運行在archivelog狀態下就可以做備份了熱備份的命令文件由三部分組成
.數據文件一個表空間一個表空間地備份
()設置表空間為備份狀態
()備份表空間的數據文件
()恢復表空間為正常狀態
.備份歸檔log文件
()臨時停止歸檔進程
()log下那些在archive redo log目標目錄中的文件
()重新啟動archive進程
()備份歸檔的redo log 文件
.用alter database backup controlfile命令來備份拷貝文件
熱備份的優點是
·可在表空間或數據文件級備份備份時間短
·備份時數據庫仍可使用
·可達到秒級恢復(恢復到某一時間點上)
·可對幾乎所有數據庫實體作恢復
·恢復是快速的在大多數情況下在數據庫仍工作時恢復
熱備份的不足是
·不能出錯否則後果嚴重
·若熱備份不成功所得結果不可用於時間點的恢復
·因難於維護所以要特別仔細小心不允許以失敗而告終
(二)來自內部的另外一個隱患用戶管理以及密碼問題
在這裡其實作為一個差不多點的數據庫管理員都很清楚Oracle數據庫本身就使用了很多種手段來加強數據庫的安全性經常見到的就有密碼角色權限等等那麼我們就從最簡單的DBSNMP說起
Oralce數據庫如果采用典型安裝後自動創建了一個叫做DBSNMP的用戶該用戶負責運行Oracle系統的智能代理(Intelligent Agent)該用戶的缺省密碼也是DBSNMP如果忘記修改該用戶的口令任何人都可以通過該用戶存取數據庫系統現在我們來看一下該用戶具有哪些權限和角色然後來分析一下該用戶對數據庫系統可能造成的損失
啟動SQL/PLUS程序使用該用戶登錄進入
From:http://tw.wingwit.com/Article/program/Oracle/201311/16631.html