正在看的ORACLE教程是:Oracle資料安全面面觀。
Oracle資料安全面面觀 作者:づ★sl戰神 隨著電腦的普及以及網路的發展,資料庫已經不再僅僅是那些程式員所專有的話題。而Oracle資料庫更是憑藉其效能卓越,操作方便靈活的特點,在資料庫的市場中已經佔據了一席之地。但是同樣隨著網路技術的不斷進步,資料資訊的不斷增加,資料安全已經不再是以前的“老生長談”,也更不是以前書本上那些“可望不可及”的條條框框。
或許很久以前,大家都覺得Oracle資料庫的安全並不存在隱患,因為Oracle公司在去年11月份開始促銷其資料庫軟體時提出的口號是“只有Oracle9i能夠做到絕對安全”。但是不管它這麼說是為了促銷,還是為了擴大知名度,總之伴去年12 月份,英國的安全專家 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)。其對Database Backup和恢複有下列用處:
資料庫後備以及線上和歸檔記錄檔,在作業系統和磁碟故障中可保證全部提交的事物可被恢複。
在資料庫開啟和正常系統使用下,如果歸檔日誌是永久儲存,線上後備可以進行和使用。
資料庫可運行在兩種不同方式下:NOARCHIVELOG方式或ARCHIVELOG 方式。資料庫在NOARCHIVELOG方式下使用時,不能進行線上日誌的歸檔。如果資料庫在ARCHIVELOG方式下運行,可實施線上日誌的歸檔。
3.物理和邏輯儲存結構
Oracle RDBMS是由資料表空間組成的,而資料表空間又是由資料檔案組成的。資料表空間資料檔案被格式化為內部的塊單位。塊的大小,是由DBA在Oracle第一次建立的時候設定的,可以在512到8192個位元組的範圍內變動。當一個對象在Oracle資料表空間中建立的時候,使用者用叫做長度的單位(初始長度((initial extent)、下一個長度(next extent)、最小長度(min extents)、以及最大長度(max extents))來標明該對象的空間大小。一個Oracle長度的大小可以變化,但是要包含一個由至少五個連續的塊構成的鏈。
(二)Oracle資料安全的維護
記得某位哲學家說過:“事物的變化離不開內因和外因。”那麼對於Oracle資料安全這個話題而言,也勢必分為“內”和“外”兩個部分。那麼好,我們就先從“內”開始說起:
1.從Oracle系統本身說起
我們先拋開令人聞風色變的“hacker”和其他一些外部的原因,先想一下我們的資料庫。什麼硬碟損壞,什麼軟體受損,什麼操作事物……一系列由於我們的“疏忽”而造成的系統問題就完全可以讓我們辛苦建立的資料庫中的資料一去不複返。那麼,我們就先從自己身上找找原因吧。
【一】解決系統本身問題的方法--資料庫的備份及恢複
·資料庫的備份:
關於Oracle資料庫的備份,標準地有三中辦法:匯出/匯入(Export/Import)、冷備份、熱備份。匯出備份是一種邏輯備份,冷備份和熱備份是物理備份。
匯出/匯入(Export/Import)
利用Export可將資料從資料庫中提取出來,利用Import則可將提取出來的資料送回Oracle資料庫中去。
a.簡單匯出資料(Export)和匯入資料(Import)
Oracle支援三種類型的輸出:
(1)表方式(T方式),將指定表的資料匯出。
(2)使用者方式(U方式),將指定使用者的所有對象及資料匯出。
(3)全庫方式(Full方式),將資料庫中的所有對象匯出。
資料匯出(Import)的過程是資料匯入(Export)的逆過程,它們的資料流向不同。
b.增量匯出/匯入
增量匯出是一種常用的資料備份方法,它只能對整個資料庫來實施,並且必須作為SYSTEM來導
[1] [2] [3] [4] 下一頁
正在看的ORACLE教程是:Oracle資料安全面面觀。出。在進行此種匯出時,系統不要求回答任何問題。匯出檔案名稱預設為export.dmp,如果不希望自己的輸出檔案定名為export.dmp,必須在命令列中指出要用的檔案名稱。
增量匯出包括三個類型:
(1)“完全”增量匯出(Complete)
即備份整個資料庫,比如:
$exp system/manager inctype=complete file=990702.dmp
(2)“增量型”增量匯出
備份上一次備份後改變的資料。比如:
$exp system/manager inctype=incremental file=990702.dmp
(3)“累計型”增量匯出(Cumulative)
累計型匯出方式只是匯出自上次“完全” 匯出之後資料庫中變化了的資訊。比如:
$exp system/manager inctype=cumulative file=990702.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檔案
·Init.ora檔案(可選)
值得注意的是冷備份必須在資料庫關閉的情況下進行,當資料庫處於開啟狀態時,執行資料庫檔案系統備份是無效的
下面是做冷備份的完整例子:
(1) 關閉資料庫$sqldba lmode=y
SQLDBA >connect internal;
SQLDBA >shutdown normal;
(2) 用拷貝命令備份全部的時間檔案、重做記錄檔、控制檔案、初始化參數檔案
SQLDBA >! cp
(3) 重啟Oracle資料庫
$sqldba
上一頁 [1] [2] [3] [4] 下一頁
正在看的ORACLE教程是:Oracle資料安全面面觀。lmode=y
SQLDBA >connect internal;
SQLDBA >startup;
熱備份
熱備份是在資料庫啟動並執行情況下,採用archivelog mode方式備份資料的方法。所以,如果你有昨天夜裡的一個冷備份而且又有今天的熱備份檔案,在發生問題時,就可以利用這些資料恢複更多的資訊。熱備份要求資料庫在Archivelog方式下操作,並需要大量的檔案空間。一旦資料庫運行在archivelog狀態下,就可以做備份了。熱備份的命令檔案由三部分組成:
1.資料檔案一個資料表空間一個資料表空間地備份。
(1)設定資料表空間為備份狀態
(2)備份資料表空間的資料檔案
(3)恢複資料表空間為正常狀態
2.備份歸檔log檔案。
(1)臨時停止歸檔進程
(2)log下那些在archive redo log目標目錄中的檔案
(3)重新啟動archive進程
(4)備份歸檔的redo log 檔案
3.用alter database backup controlfile命令來備份拷貝檔案
熱備份的優點是:
·可在資料表空間或資料檔案級備份,備份時間短。
·備份時資料庫仍可使用。
·可達到秒級恢複(恢複到某一時間點上)。
·可對幾乎所有資料庫實體作恢複。
·恢複是快速的,在大多數情況下在資料庫仍工作時恢複。
熱備份的不足是:
·不能出錯,否則後果嚴重。
·若熱備份不成功,所得結果不可用於時間點的恢複。
·因難於維護,所以要特別仔細小心,不允許“以失敗而告終”。
二)來自內部的另外一個隱患--使用者管理以及密碼問題
在這裡,其實作為一個差不多點的資料庫管理員都很清楚,Oracle資料庫本身就使用了很多種手段來加強資料庫的安全性,經常見到的就有密碼,角色,許可權等等。那麼我們就從最簡單的DBSNMP說起:
Oralce資料庫如果採用典型安裝後,自動建立了一個叫做DBSNMP的使用者,該使用者負責運行Oracle系統的智能代理(Intelligent Agent),該使用者的預設密碼也是“DBSNMP”。如果忘記修改該使用者的口令,任何人都可以通過該使用者存取資料庫系統。現在我們來看一下該使用者具有哪些許可權和角色,然後來分析一下該使用者對資料庫系統可能造成的損失。
啟動SQL/PLUS程式,使用該使用者登入進入:
SQL> select * from session_privs; CREATE SESSION ALTER SESSION UNLIMITED TABLESPACE CREATE TABLE CREATE CLUSTER CREATE SYNONYM CREATE PUBLIC SYNONYM CREATE VIEW CREATE SEQUENCE CREATE DATABASE LINK CREATE PROCEDURE CREATE TRIGGER ANALYZE ANY CREATE TYPE CREATE OPERATOR CREATE INDEXTYPE
可以看到該使用者不是SYS或SYSTEM系統管理使用者,然而,它卻具有兩個系統級許可權:UNLIMITED TABLESPACE和CREATE PUBLIC SYNONYM。
看到這兩個許可權你應該馬上想到,這些都是安全隱患,尤其是UNLIMITED TABLESPACE,它是破壞資料庫系統的攻擊點之一。如果這時候你還依然認為,即使有人利用這個沒有修改的口令登入進資料庫也造成不了什麼損失的話,我就不得不提醒你:該使用者具有UNLIMITED TABLESPACE的系統許可權,它可以寫一個小的指令碼,然後惡意將系統用垃圾資料填滿,這樣資料庫系統也就無法運行,並將直接導致最終的癱瘓。目前很多資料庫系統都要求7X24的工作,如果出現了系統用垃圾資料填滿的情況,那麼,等資料庫系統復原時,恐怕不可挽回的損失已經造成了。
可是除了DBSNMP還有很多其他的使用者,怎麼辦呢?讓我們先看一下目前普遍存在於Oracle資料庫中的使用者管理問題:
(1)許可權過大:對ORACLE資料庫編程和瀏覽的一般使用者常常具有DBA (資料庫管理員許可權),能對資料庫系統做任何修改或刪除。
(2)安全性差:很多ORACLE使用者預設儲存位置都在系統資料表空間,這樣不僅影響系統的正常工作,而且不同使用者的資料資訊互相影響、透明,保密性差。隨著資料的不斷加入,有可能使整個資料庫系統崩潰。
(3)密碼有規律:在ORACLE調試初期形成的使用者名稱和密碼一致的不良習慣保留到現在;系統使用者SYS和SYSTEM的密碼也眾所皆知。
知道了這些普遍的“毛病”,我們怎麼做呢?下面是我的一些建議:
(1)ORACLE DBA (資料庫管理員)的規範
·SUN Solaris作業系統下ORACLE使用者密碼應嚴格保密,絕不該把密碼設成ORACLE;並指定專門的資料庫管理員定期修改。
·ORACLE初始化建立的SYS和SYSTEM系統管理員使用者密碼應由原來MANAGER改成別的不易被記憶的字串。
·ORACLE WEB SERVER的管理連接埠具備DBA瀏覽資料庫的能力,因此其管理者ADMIN的密碼也應保密,不該把密碼設成MANAGER;並指定專門的資料庫管理員定期修改。
·ORACLE DBA最好在SUN SPARC伺服器控制台上用視窗式介面實現管理。前提是ORACLE使用者啟動伺服器,然後在視窗式命令列下輸入SVRMGRM,即啟動了ORACLE SERVER MANAGER菜單式管理;用SYSDBA身份登入後,就可做資料庫系統維護工作了
(2)SQL*PLUS編程使用者的規範
·儲存結構的規範
考慮到用SQL*PLUS編程可實現各行各業、各公司、各部門多種多樣的應用需求,我們的SQL*PLUS編程使用者也應該朝這個方向規範:不同種類的應用必須有不同的使用者;不同種類的應用必須有不同的儲存位置,包括物理檔案、預設資料表空間、暫存資料表空間的建立和規劃:當準備編寫某一較大規模(從ORACLE資料量和面向使用者量考慮)應用程式時,首先應該建立一個邏輯的儲存位置-資料表空間,同時定義物理檔案的存放路徑和所佔硬碟的大小。
①、物理檔案預設的存放路徑在/oracle_home/dbs下,在命令列下用UNIX指令df -k 可查看硬碟資來源資料分割的使用方式。如果oracle_home使用率達90‰以上,而且有一個或多個
上一頁 [1] [2] [3] [4] 下一頁
正在看的ORACLE教程是:Oracle資料安全面面觀。較為空白閑的硬碟資來源資料分割可以利用,我們最好把物理檔案預設的存放路徑改到較為空白閑的硬碟資來源資料分割路徑下。在此路徑下我們可以這樣規劃資源物理檔案的儲存:
xxx資料表空間
xxx行業/ xxx公司/ xxx 部門/ xxx 服務.dbf
DEMO資料表空間
default_datafile_home1/col /elec/sys4/demo1.dbf
default_datafile_home1/col /elec/sys4/demo2.dbf
公司系統四部摹擬示範系統物理檔案
HUMAN資料表空間
default_datafile_home1/col/elec/human/human.dbf
公司人事部人事管理系統物理檔案
BOOK資料表空間
default_datafile_home1/col/elec/book/book.dbf
公司資料室圖書管理系統物理檔案
QUESTION資料表空間
default_datafile_home1/col/elec/client/question.dbf
公司客戶服務部問題庫系統物理檔案
PC資料表空間
default_datafile_home1/col/chaoxun/client/pc.dbf
公司PC機售後服務系統物理檔案
……資料表空間
default_datafile_home2/……………………………
等等
說明:其中default_datafile_home1指oracle_home/dbs;default_datafile_home2指較為空白閑的硬碟資來源資料分割路徑。
②、物理檔案的大小根據應用系統的資料量、資料對象、程式包的多少來定。一般用於摹擬示範的小系統,資料表空間初始的物理檔案為2M即能滿足要求,如果資訊量滿,還可以增加物理檔案,擴充資料表空間(每次擴充大小也可暫訂為2M);一般實際啟動並執行應用系統可適當增加資料表空間初始的物理檔案大小,但也不要一次分配太大(因為不易回收空間,卻易擴充空間),這也需要根據具體情況具體分析:資訊量大、需長時間儲存的應用在條件允許情況下,資料表空間可以大到幾百M甚至上G;資訊量小、短期經常重新整理的應用,資料表空間可以控制在2M以下。
③、資料表空間的名稱應該採用同系統應用相似的英文字元或字元縮寫,資料表空間所對應的一個或多個物理檔案名稱也應有相關性。不同使用者所處的預設資料表空間不同,儲存的資訊就不能互相訪問。這比把所有使用者資訊都儲存在系統資料表空間,安全性大大提高了。如果用ORACLE WEB SERVER管理連接埠建立的使用者,其預設和暫存資料表空間一定是系統資料表空間,DBA切記要改變使用者的預設資料表空間。暫存資料表空間存放臨時資料區段,處理一些排序、合并等中間操作,根據實際應用的需求可以把它們放在專門建立的資料表空間裡;如果系統資料表空間大,也可以把它們放在系統資料表空間。使用者建立的資料索引最好和資料檔案分開存放在不同資料表空間,以減少資料爭用和提高響應速度。
上一頁 [1] [2] [3] [4]