Oracle數(shù)據(jù)安全面面觀
更新時間:2007年03月06日 00:00:00 作者:
正在看的ORACLE教程是:Oracle數(shù)據(jù)安全面面觀。 Oracle數(shù)據(jù)安全面面觀 作者:づ★sl戰(zhàn)神 隨著計算機的普及以及網(wǎng)絡(luò)的發(fā)展,數(shù)據(jù)庫已經(jīng)不再僅僅是那些程序員所專有的話題。而Oracle數(shù)據(jù)庫更是憑借其性能卓越,操作方便靈活的特點,在數(shù)據(jù)庫的市場中已經(jīng)占據(jù)了一席之地。但是同樣隨著網(wǎng)絡(luò)技術(shù)的不斷進步,數(shù)據(jù)信息的不斷增加,數(shù)據(jù)安全已經(jīng)不再是以前的“老生長談”,也更不是以前書本上那些“可望不可及”的條條框框。
或許很久以前,大家都覺得Oracle數(shù)據(jù)庫的安全并不存在隱患,因為Oracle公司在去年11月份開始促銷其數(shù)據(jù)庫軟件時提出的口號是“只有Oracle9i能夠做到絕對安全”。但是不管它這么說是為了促銷,還是為了擴大知名度,總之伴去年12 月份,英國的安全專家 David Litchfield 發(fā)現(xiàn)的9iAS 中存在的程序錯誤導(dǎo)致的緩沖溢出漏洞以及后來,PenTest Limited 和 eEye Digital Security 各自提出了一個小的漏洞,所有使用Oracle公司產(chǎn)品的人都不由地緊張了原本松弛的大腦--這個對于用戶來說,畢竟關(guān)系到了自己的“身家性命”。
下面筆者將帶著大家走進Oracle數(shù)據(jù)安全的世界。由于筆者水平有限,所以不足之處在所難免,望大家不吝賜教。
(一)Oracle數(shù)據(jù)庫的一些基本常識
這里僅僅是為了以后的安全奠定一些基礎(chǔ),因為我們后面要用到它們。呵呵~!
1.Oracle所包含的組件
在 Oracle,數(shù)據(jù)庫是指整個 Oracle RDBMS 環(huán)境,它包括以下組件:
·Oracle 數(shù)據(jù)庫進程和緩沖(實例)。
·SYSTEM 表空間包含一個集中系統(tǒng)類目,它可以由一個或多個數(shù)據(jù)文件構(gòu)成。
·其它由數(shù)據(jù)庫管理員 (DBA)(可選)定義的表空間,每個都由一個或多個數(shù)據(jù)文件構(gòu)成。
·兩個以上的聯(lián)機恢復(fù)日志。
·歸檔恢復(fù)日志(可選)。
·其它文件(控制文件、Init.ora、Config.ora 等)。
每個 Oracle 數(shù)據(jù)庫都在一個中央系統(tǒng)類目和數(shù)據(jù)字典上運行,它位于SYSTEM 表空間。
2.關(guān)于“日志”
Oracle數(shù)據(jù)庫使用幾種結(jié)構(gòu)來保護數(shù)據(jù):數(shù)據(jù)庫后備、日志、回滾段和控制文件。下面我們將大體上了解一下作為主要結(jié)構(gòu)之一的“日志”:
每一個Oracle數(shù)據(jù)庫實例都提供日志,記錄數(shù)據(jù)庫中所作的全部修改。每一個運行的Oracle數(shù)據(jù)庫實例相應(yīng)地有一個在線日志,它與Oracle后臺進程LGWR一起工作,立即記錄該實例所作的全部修改。歸檔(離線)日志是可選擇的,一個Oracle數(shù)據(jù)庫實例一旦在線日志填滿后,可形成在線日志歸檔文件。歸檔的在線日志文件被唯一標識并合并成歸檔日志。
·關(guān)于在線日志:一個Oracle數(shù)據(jù)庫的每一實例有一個相關(guān)聯(lián)的在線日志。一個在線日志由多個在線日志文件組成。在線日志文件(online redo log file)填入日志項(redo entry),日志項記錄的數(shù)據(jù)用于重構(gòu)對數(shù)據(jù)庫所作的全部修改。
·關(guān)于歸檔日志:Oracle要將填滿的在線日志文件組歸檔時,則要建立歸檔日志(archived redo log)。其對數(shù)據(jù)庫備份和恢復(fù)有下列用處:
<1>數(shù)據(jù)庫后備以及在線和歸檔日志文件,在操作系統(tǒng)和磁盤故障中可保證全部提交的事物可被恢復(fù)。
<2>在數(shù)據(jù)庫打開和正常系統(tǒng)使用下,如果歸檔日志是永久保存,在線后備可以進行和使用。
數(shù)據(jù)庫可運行在兩種不同方式下:NOARCHIVELOG方式或ARCHIVELOG 方式。數(shù)據(jù)庫在NOARCHIVELOG方式下使用時,不能進行在線日志的歸檔。如果數(shù)據(jù)庫在ARCHIVELOG方式下運行,可實施在線日志的歸檔。
3.物理和邏輯存儲結(jié)構(gòu)
Oracle RDBMS是由表空間組成的,而表空間又是由數(shù)據(jù)文件組成的。表空間數(shù)據(jù)文件被格式化為內(nèi)部的塊單位。塊的大小,是由DBA在Oracle第一次創(chuàng)建的時候設(shè)置的,可以在512到8192個字節(jié)的范圍內(nèi)變動。當(dāng)一個對象在Oracle表空間中創(chuàng)建的時候,用戶用叫做長度的單位(初始長度((initial extent)、下一個長度(next extent)、最小長度(min extents)、以及最大長度(max extents))來標明該對象的空間大小。一個Oracle長度的大小可以變化,但是要包含一個由至少五個連續(xù)的塊構(gòu)成的鏈。
(二)Oracle數(shù)據(jù)安全的維護
記得某位哲學(xué)家說過:“事物的變化離不開內(nèi)因和外因?!蹦敲磳τ贠racle數(shù)據(jù)安全這個話題而言,也勢必分為“內(nèi)”和“外”兩個部分。那么好,我們就先從“內(nèi)”開始說起:
1.從Oracle系統(tǒng)本身說起
我們先拋開令人聞風(fēng)色變的“hacker”和其他一些外部的原因,先想一下我們的數(shù)據(jù)庫。什么硬盤損壞,什么軟件受損,什么操作事物……一系列由于我們的“疏忽”而造成的系統(tǒng)問題就完全可以讓我們辛苦建立的數(shù)據(jù)庫中的數(shù)據(jù)一去不復(fù)返。那么,我們就先從自己身上找找原因吧。
【一】解決系統(tǒng)本身問題的方法--數(shù)據(jù)庫的備份及恢復(fù)
·數(shù)據(jù)庫的備份:
關(guān)于Oracle數(shù)據(jù)庫的備份,標準地有三中辦法:導(dǎo)出/導(dǎo)入(Export/Import)、冷備份、熱備份。導(dǎo)出備份是一種邏輯備份,冷備份和熱備份是物理備份。
<1>導(dǎo)出/導(dǎo)入(Export/Import)
利用Export可將數(shù)據(jù)從數(shù)據(jù)庫中提取出來,利用Import則可將提取出來的數(shù)據(jù)送回Oracle數(shù)據(jù)庫中去。
a.簡單導(dǎo)出數(shù)據(jù)(Export)和導(dǎo)入數(shù)據(jù)(Import)
Oracle支持三種類型的輸出:
(1)表方式(T方式),將指定表的數(shù)據(jù)導(dǎo)出。
(2)用戶方式(U方式),將指定用戶的所有對象及數(shù)據(jù)導(dǎo)出。
(3)全庫方式(Full方式),將數(shù)據(jù)庫中的所有對象導(dǎo)出。
數(shù)據(jù)導(dǎo)出(Import)的過程是數(shù)據(jù)導(dǎo)入(Export)的逆過程,它們的數(shù)據(jù)流向不同。
b.增量導(dǎo)出/導(dǎo)入
增量導(dǎo)出是一種常用的數(shù)據(jù)備份方法,它只能對整個數(shù)據(jù)庫來實施,并且必須作為SYSTEM來導(dǎo)正在看的ORACLE教程是:Oracle數(shù)據(jù)安全面面觀。出。在進行此種導(dǎo)出時,系統(tǒng)不要求回答任何問題。導(dǎo)出文件名缺省為export.dmp,如果不希望自己的輸出文件定名為export.dmp,必須在命令行中指出要用的文件名。
增量導(dǎo)出包括三個類型:
(1)“完全”增量導(dǎo)出(Complete)
即備份整個數(shù)據(jù)庫,比如:
$exp system/manager inctype=complete file=990702.dmp
(2)“增量型”增量導(dǎo)出
備份上一次備份后改變的數(shù)據(jù)。比如:
$exp system/manager inctype=incremental file=990702.dmp
(3)“累計型”增量導(dǎo)出(Cumulative)
累計型導(dǎo)出方式只是導(dǎo)出自上次“完全” 導(dǎo)出之后數(shù)據(jù)庫中變化了的信息。比如:
$exp system/manager inctype=cumulative file=990702.dmp
數(shù)據(jù)庫管理員可以排定一個備份日程表,用數(shù)據(jù)導(dǎo)出的三個不同方式合理高效地完成。比如數(shù)據(jù)庫的備份任務(wù)可作如下安排:
·星期一:完全導(dǎo)出(A)
·星期二:增量導(dǎo)出(B)
·星期三:增量導(dǎo)出(C)
·星期四:增量導(dǎo)出(D)
·星期五:累計導(dǎo)出(E)
·星期六:增量導(dǎo)出(F)
·星期日:增量導(dǎo)出(G)
如果在星期日,數(shù)據(jù)庫遭到意外破壞,數(shù)據(jù)庫管理員可按以下步驟來恢復(fù)數(shù)據(jù)庫:
第一步:用命令CREATE DATABASE重新生成數(shù)據(jù)庫結(jié)構(gòu);
第二步:創(chuàng)建一個足夠大的附加回段。
第三步:完全增量導(dǎo)入A:
$imp system./manager inctype= RECTORE FULL=Y FILE=A
第四步:累計增量導(dǎo)入E:
$imp system/manager inctype= RECTORE FULL=Y FILE =E
第五步:最近增量導(dǎo)入F:
$imp system/manager inctype=RESTORE FULL=Y FILE=F
<2>冷備份
冷備份發(fā)生在數(shù)據(jù)庫已經(jīng)正常關(guān)閉的情況下,當(dāng)正常關(guān)閉時會提供給我們一個完整的數(shù)據(jù)庫。冷備份是將關(guān)鍵性文件拷貝到另外位置的一種說法。對于備份Oracle信息而言,冷備份是最快和最安全的方法。冷備份的優(yōu)點是:
·是非??焖俚膫浞莘椒ǎㄖ恍杩截愇募?nbsp;
·容易歸檔(簡單拷貝即可)
·容易恢復(fù)到某個時間點上(只需將文件再拷貝回去)
·能與歸檔方法相結(jié)合,作數(shù)據(jù)庫“最新狀態(tài)”的恢復(fù)。
·低度維護,高度安全。
但冷備份也有如下不足:
·單獨使用時,只能提供到“某一時間點上”的恢復(fù)。
·在實施備份的全過程中,數(shù)據(jù)庫必須要作備份而不能作其它工作。也就是說,在冷備份過程中,數(shù)據(jù)庫必須是關(guān)閉狀態(tài)。
·若磁盤空間有限,只能拷貝到磁帶等其它外部存儲設(shè)備上,速度會很慢。
·不能按表或按用戶恢復(fù)。
如果可能的話(主要看效率),應(yīng)將信息備份到磁盤上,然后啟動數(shù)據(jù)庫(使用戶可以工作)并將所備份的信息拷貝到磁帶上(拷貝的同時,數(shù)據(jù)庫也可以工作)。冷備份中必須拷貝的文件包括:
·所有數(shù)據(jù)文件
·所有控制文件
·所有聯(lián)機REDO LOG文件
·Init.ora文件(可選)
值得注意的是冷備份必須在數(shù)據(jù)庫關(guān)閉的情況下進行,當(dāng)數(shù)據(jù)庫處于打開狀態(tài)時,執(zhí)行數(shù)據(jù)庫文件系統(tǒng)備份是無效的
下面是做冷備份的完整例子:
(1) 關(guān)閉數(shù)據(jù)庫$sqldba lmode=y
SQLDBA >connect internal;
SQLDBA >shutdown normal;
(2) 用拷貝命令備份全部的時間文件、重做日志文件、控制文件、初始化參數(shù)文件
SQLDBA >! cp < file > < backup directory >
(3) 重啟Oracle數(shù)據(jù)庫
$sqldba 正在看的ORACLE教程是:Oracle數(shù)據(jù)安全面面觀。lmode=y
SQLDBA >connect internal;
SQLDBA >startup;
<3>熱備份
熱備份是在數(shù)據(jù)庫運行的情況下,采用archivelog mode方式備份數(shù)據(jù)的方法。所以,如果你有昨天夜里的一個冷備份而且又有今天的熱備份文件,在發(fā)生問題時,就可以利用這些資料恢復(fù)更多的信息。熱備份要求數(shù)據(jù)庫在Archivelog方式下操作,并需要大量的檔案空間。一旦數(shù)據(jù)庫運行在archivelog狀態(tài)下,就可以做備份了。熱備份的命令文件由三部分組成:
1.?dāng)?shù)據(jù)文件一個表空間一個表空間地備份。
(1)設(shè)置表空間為備份狀態(tài)
(2)備份表空間的數(shù)據(jù)文件
(3)恢復(fù)表空間為正常狀態(tài)
2.備份歸檔log文件。
(1)臨時停止歸檔進程
(2)log下那些在archive redo log目標目錄中的文件
(3)重新啟動archive進程
(4)備份歸檔的redo log 文件
3.用alter database backup controlfile命令來備份拷貝文件
熱備份的優(yōu)點是:
·可在表空間或數(shù)據(jù)文件級備份,備份時間短。
·備份時數(shù)據(jù)庫仍可使用。
·可達到秒級恢復(fù)(恢復(fù)到某一時間點上)。
·可對幾乎所有數(shù)據(jù)庫實體作恢復(fù)。
·恢復(fù)是快速的,在大多數(shù)情況下在數(shù)據(jù)庫仍工作時恢復(fù)。
熱備份的不足是:
·不能出錯,否則后果嚴重。
·若熱備份不成功,所得結(jié)果不可用于時間點的恢復(fù)。
·因難于維護,所以要特別仔細小心,不允許“以失敗而告終”。
二)來自內(nèi)部的另外一個隱患--用戶管理以及密碼問題
在這里,其實作為一個差不多點的數(shù)據(jù)庫管理員都很清楚,Oracle數(shù)據(jù)庫本身就使用了很多種手段來加強數(shù)據(jù)庫的安全性,經(jīng)常見到的就有密碼,角色,權(quán)限等等。那么我們就從最簡單的DBSNMP說起:
Oralce數(shù)據(jù)庫如果采用典型安裝后,自動創(chuàng)建了一個叫做DBSNMP的用戶,該用戶負責(zé)運行Oracle系統(tǒng)的智能代理(Intelligent Agent),該用戶的缺省密碼也是“DBSNMP”。如果忘記修改該用戶的口令,任何人都可以通過該用戶存取數(shù)據(jù)庫系統(tǒng)?,F(xiàn)在我們來看一下該用戶具有哪些權(quán)限和角色,然后來分析一下該用戶對數(shù)據(jù)庫系統(tǒng)可能造成的損失。
啟動SQL/PLUS程序,使用該用戶登錄進入:
可以看到該用戶不是SYS或SYSTEM管理用戶,然而,它卻具有兩個系統(tǒng)級權(quán)限:UNLIMITED TABLESPACE和CREATE PUBLIC SYNONYM。
看到這兩個權(quán)限你應(yīng)該馬上想到,這些都是安全隱患,尤其是UNLIMITED TABLESPACE,它是破壞數(shù)據(jù)庫系統(tǒng)的攻擊點之一。如果這時候你還依然認為,即使有人利用這個沒有修改的口令登錄進數(shù)據(jù)庫也造成不了什么損失的話,我就不得不提醒你:該用戶具有UNLIMITED TABLESPACE的系統(tǒng)權(quán)限,它可以寫一個小的腳本,然后惡意將系統(tǒng)用垃圾數(shù)據(jù)填滿,這樣數(shù)據(jù)庫系統(tǒng)也就無法運行,并將直接導(dǎo)致最終的癱瘓。目前很多數(shù)據(jù)庫系統(tǒng)都要求7X24的工作,如果出現(xiàn)了系統(tǒng)用垃圾數(shù)據(jù)填滿的情況,那么,等數(shù)據(jù)庫系統(tǒng)恢復(fù)時,恐怕不可挽回的損失已經(jīng)造成了。
可是除了DBSNMP還有很多其他的用戶,怎么辦呢?讓我們先看一下目前普遍存在于Oracle數(shù)據(jù)庫中的用戶管理問題:
(1)權(quán)限過大:對ORACLE數(shù)據(jù)庫編程和瀏覽的一般用戶常常具有DBA (數(shù)據(jù)庫管理員權(quán)限),能對數(shù)據(jù)庫系統(tǒng)做任何修改或刪除。
(2)安全性差:很多ORACLE用戶缺省存儲位置都在系統(tǒng)表空間,這樣不僅影響系統(tǒng)的正常工作,而且不同用戶的數(shù)據(jù)信息互相影響、透明,保密性差。隨著數(shù)據(jù)的不斷加入,有可能使整個數(shù)據(jù)庫系統(tǒng)崩潰。
(3)密碼有規(guī)律:在ORACLE調(diào)試初期形成的用戶名和密碼一致的不良習(xí)慣保留到現(xiàn)在;系統(tǒng)用戶SYS和SYSTEM的密碼也眾所皆知。
知道了這些普遍的“毛病”,我們怎么做呢?下面是我的一些建議:
(1)ORACLE DBA (數(shù)據(jù)庫管理員)的規(guī)范
·SUN Solaris操作系統(tǒng)下ORACLE用戶密碼應(yīng)嚴格保密,絕不該把密碼設(shè)成ORACLE;并指定專門的數(shù)據(jù)庫管理員定期修改。
·ORACLE初始化建立的SYS和SYSTEM系統(tǒng)管理員用戶密碼應(yīng)由原來MANAGER改成別的不易被記憶的字符串。
·ORACLE WEB SERVER的管理端口具備DBA瀏覽數(shù)據(jù)庫的能力,因此其管理者ADMIN的密碼也應(yīng)保密,不該把密碼設(shè)成MANAGER;并指定專門的數(shù)據(jù)庫管理員定期修改。
·ORACLE DBA最好在SUN SPARC服務(wù)器控制臺上用窗口式界面實現(xiàn)管理。前提是ORACLE用戶啟動服務(wù)器,然后在窗口式命令行下輸入SVRMGRM,即啟動了ORACLE SERVER MANAGER菜單式管理;用SYSDBA身份登錄后,就可做數(shù)據(jù)庫系統(tǒng)維護工作了
(2)SQL*PLUS編程用戶的規(guī)范
·存儲結(jié)構(gòu)的規(guī)范
考慮到用SQL*PLUS編程可實現(xiàn)各行各業(yè)、各公司、各部門多種多樣的應(yīng)用需求,我們的SQL*PLUS編程用戶也應(yīng)該朝這個方向規(guī)范:不同種類的應(yīng)用必須有不同的用戶;不同種類的應(yīng)用必須有不同的存儲位置,包括物理文件、缺省表空間、臨時表空間的創(chuàng)建和規(guī)劃:當(dāng)準備編寫某一較大規(guī)模(從ORACLE數(shù)據(jù)量和面向用戶量考慮)應(yīng)用程序時,首先應(yīng)該創(chuàng)建一個邏輯的存儲位置-表空間,同時定義物理文件的存放路徑和所占硬盤的大小。
①、物理文件缺省的存放路徑在/oracle_home/dbs下,在命令行下用UNIX指令df -k 可查看硬盤資源分區(qū)的使用情況。如果oracle_home使用率達90‰以上,而且有一個或多個正在看的ORACLE教程是:Oracle數(shù)據(jù)安全面面觀。較為空閑的硬盤資源分區(qū)可以利用,我們最好把物理文件缺省的存放路徑改到較為空閑的硬盤資源分區(qū)路徑下。在此路徑下我們可以這樣規(guī)劃資源物理文件的存儲:
xxx表空間
xxx行業(yè)/ xxx公司/ xxx 部門/ xxx 服務(wù).dbf
DEMO表空間
default_datafile_home1/col /elec/sys4/demo1.dbf
default_datafile_home1/col /elec/sys4/demo2.dbf
公司系統(tǒng)四部摹擬演示系統(tǒng)物理文件
HUMAN表空間
default_datafile_home1/col/elec/human/human.dbf
公司人事部人事管理系統(tǒng)物理文件
BOOK表空間
default_datafile_home1/col/elec/book/book.dbf
公司資料室圖書管理系統(tǒng)物理文件
QUESTION表空間
default_datafile_home1/col/elec/client/question.dbf
公司客戶服務(wù)部問題庫系統(tǒng)物理文件
PC表空間
default_datafile_home1/col/chaoxun/client/pc.dbf
公司PC機售后服務(wù)系統(tǒng)物理文件
……表空間
default_datafile_home2/……………………………
等等
說明:其中default_datafile_home1指oracle_home/dbs;default_datafile_home2指較為空閑的硬盤資源分區(qū)路徑。
②、物理文件的大小根據(jù)應(yīng)用系統(tǒng)的數(shù)據(jù)量、數(shù)據(jù)對象、程序包的多少來定。一般用于摹擬演示的小系統(tǒng),表空間初始的物理文件為2M即能滿足要求,如果信息量滿,還可以增加物理文件,擴充表空間(每次擴充大小也可暫定為2M);一般實際運行的應(yīng)用系統(tǒng)可適當(dāng)增加表空間初始的物理文件大小,但也不要一次分配太大(因為不易回收空間,卻易擴充空間),這也需要根據(jù)具體情況具體分析:信息量大、需長時間保存的應(yīng)用在條件允許情況下,表空間可以大到幾百M甚至上G;信息量小、短期經(jīng)常刷新的應(yīng)用,表空間可以控制在2M以下。
③、表空間的名稱應(yīng)該采用同系統(tǒng)應(yīng)用相似的英文字符或字符縮寫,表空間所對應(yīng)的一個或多個物理文件名也應(yīng)有相關(guān)性。不同用戶所處的缺省表空間不同,存儲的信息就不能互相訪問。這比把所有用戶信息都儲存在系統(tǒng)表空間,安全性大大提高了。如果用ORACLE WEB SERVER管理端口創(chuàng)建的用戶,其缺省和臨時表空間一定是系統(tǒng)表空間,DBA切記要改變用戶的缺省表空間。臨時表空間存放臨時數(shù)據(jù)段,處理一些排序、合并等中間操作,根據(jù)實際應(yīng)用的需求可以把它們放在專門創(chuàng)建的表空間里;如果系統(tǒng)表空間大,也可以把它們放在系統(tǒng)表空間。用戶創(chuàng)建的數(shù)據(jù)索引最好和數(shù)據(jù)文件分開存放在不同表空間,以減少數(shù)據(jù)爭用和提高響應(yīng)速度。
或許很久以前,大家都覺得Oracle數(shù)據(jù)庫的安全并不存在隱患,因為Oracle公司在去年11月份開始促銷其數(shù)據(jù)庫軟件時提出的口號是“只有Oracle9i能夠做到絕對安全”。但是不管它這么說是為了促銷,還是為了擴大知名度,總之伴去年12 月份,英國的安全專家 David Litchfield 發(fā)現(xiàn)的9iAS 中存在的程序錯誤導(dǎo)致的緩沖溢出漏洞以及后來,PenTest Limited 和 eEye Digital Security 各自提出了一個小的漏洞,所有使用Oracle公司產(chǎn)品的人都不由地緊張了原本松弛的大腦--這個對于用戶來說,畢竟關(guān)系到了自己的“身家性命”。
下面筆者將帶著大家走進Oracle數(shù)據(jù)安全的世界。由于筆者水平有限,所以不足之處在所難免,望大家不吝賜教。
(一)Oracle數(shù)據(jù)庫的一些基本常識
這里僅僅是為了以后的安全奠定一些基礎(chǔ),因為我們后面要用到它們。呵呵~!
1.Oracle所包含的組件
在 Oracle,數(shù)據(jù)庫是指整個 Oracle RDBMS 環(huán)境,它包括以下組件:
·Oracle 數(shù)據(jù)庫進程和緩沖(實例)。
·SYSTEM 表空間包含一個集中系統(tǒng)類目,它可以由一個或多個數(shù)據(jù)文件構(gòu)成。
·其它由數(shù)據(jù)庫管理員 (DBA)(可選)定義的表空間,每個都由一個或多個數(shù)據(jù)文件構(gòu)成。
·兩個以上的聯(lián)機恢復(fù)日志。
·歸檔恢復(fù)日志(可選)。
·其它文件(控制文件、Init.ora、Config.ora 等)。
每個 Oracle 數(shù)據(jù)庫都在一個中央系統(tǒng)類目和數(shù)據(jù)字典上運行,它位于SYSTEM 表空間。
2.關(guān)于“日志”
Oracle數(shù)據(jù)庫使用幾種結(jié)構(gòu)來保護數(shù)據(jù):數(shù)據(jù)庫后備、日志、回滾段和控制文件。下面我們將大體上了解一下作為主要結(jié)構(gòu)之一的“日志”:
每一個Oracle數(shù)據(jù)庫實例都提供日志,記錄數(shù)據(jù)庫中所作的全部修改。每一個運行的Oracle數(shù)據(jù)庫實例相應(yīng)地有一個在線日志,它與Oracle后臺進程LGWR一起工作,立即記錄該實例所作的全部修改。歸檔(離線)日志是可選擇的,一個Oracle數(shù)據(jù)庫實例一旦在線日志填滿后,可形成在線日志歸檔文件。歸檔的在線日志文件被唯一標識并合并成歸檔日志。
·關(guān)于在線日志:一個Oracle數(shù)據(jù)庫的每一實例有一個相關(guān)聯(lián)的在線日志。一個在線日志由多個在線日志文件組成。在線日志文件(online redo log file)填入日志項(redo entry),日志項記錄的數(shù)據(jù)用于重構(gòu)對數(shù)據(jù)庫所作的全部修改。
·關(guān)于歸檔日志:Oracle要將填滿的在線日志文件組歸檔時,則要建立歸檔日志(archived redo log)。其對數(shù)據(jù)庫備份和恢復(fù)有下列用處:
<1>數(shù)據(jù)庫后備以及在線和歸檔日志文件,在操作系統(tǒng)和磁盤故障中可保證全部提交的事物可被恢復(fù)。
<2>在數(shù)據(jù)庫打開和正常系統(tǒng)使用下,如果歸檔日志是永久保存,在線后備可以進行和使用。
數(shù)據(jù)庫可運行在兩種不同方式下:NOARCHIVELOG方式或ARCHIVELOG 方式。數(shù)據(jù)庫在NOARCHIVELOG方式下使用時,不能進行在線日志的歸檔。如果數(shù)據(jù)庫在ARCHIVELOG方式下運行,可實施在線日志的歸檔。
3.物理和邏輯存儲結(jié)構(gòu)
Oracle RDBMS是由表空間組成的,而表空間又是由數(shù)據(jù)文件組成的。表空間數(shù)據(jù)文件被格式化為內(nèi)部的塊單位。塊的大小,是由DBA在Oracle第一次創(chuàng)建的時候設(shè)置的,可以在512到8192個字節(jié)的范圍內(nèi)變動。當(dāng)一個對象在Oracle表空間中創(chuàng)建的時候,用戶用叫做長度的單位(初始長度((initial extent)、下一個長度(next extent)、最小長度(min extents)、以及最大長度(max extents))來標明該對象的空間大小。一個Oracle長度的大小可以變化,但是要包含一個由至少五個連續(xù)的塊構(gòu)成的鏈。
(二)Oracle數(shù)據(jù)安全的維護
記得某位哲學(xué)家說過:“事物的變化離不開內(nèi)因和外因?!蹦敲磳τ贠racle數(shù)據(jù)安全這個話題而言,也勢必分為“內(nèi)”和“外”兩個部分。那么好,我們就先從“內(nèi)”開始說起:
1.從Oracle系統(tǒng)本身說起
我們先拋開令人聞風(fēng)色變的“hacker”和其他一些外部的原因,先想一下我們的數(shù)據(jù)庫。什么硬盤損壞,什么軟件受損,什么操作事物……一系列由于我們的“疏忽”而造成的系統(tǒng)問題就完全可以讓我們辛苦建立的數(shù)據(jù)庫中的數(shù)據(jù)一去不復(fù)返。那么,我們就先從自己身上找找原因吧。
【一】解決系統(tǒng)本身問題的方法--數(shù)據(jù)庫的備份及恢復(fù)
·數(shù)據(jù)庫的備份:
關(guān)于Oracle數(shù)據(jù)庫的備份,標準地有三中辦法:導(dǎo)出/導(dǎo)入(Export/Import)、冷備份、熱備份。導(dǎo)出備份是一種邏輯備份,冷備份和熱備份是物理備份。
<1>導(dǎo)出/導(dǎo)入(Export/Import)
利用Export可將數(shù)據(jù)從數(shù)據(jù)庫中提取出來,利用Import則可將提取出來的數(shù)據(jù)送回Oracle數(shù)據(jù)庫中去。
a.簡單導(dǎo)出數(shù)據(jù)(Export)和導(dǎo)入數(shù)據(jù)(Import)
Oracle支持三種類型的輸出:
(1)表方式(T方式),將指定表的數(shù)據(jù)導(dǎo)出。
(2)用戶方式(U方式),將指定用戶的所有對象及數(shù)據(jù)導(dǎo)出。
(3)全庫方式(Full方式),將數(shù)據(jù)庫中的所有對象導(dǎo)出。
數(shù)據(jù)導(dǎo)出(Import)的過程是數(shù)據(jù)導(dǎo)入(Export)的逆過程,它們的數(shù)據(jù)流向不同。
b.增量導(dǎo)出/導(dǎo)入
增量導(dǎo)出是一種常用的數(shù)據(jù)備份方法,它只能對整個數(shù)據(jù)庫來實施,并且必須作為SYSTEM來導(dǎo)正在看的ORACLE教程是:Oracle數(shù)據(jù)安全面面觀。出。在進行此種導(dǎo)出時,系統(tǒng)不要求回答任何問題。導(dǎo)出文件名缺省為export.dmp,如果不希望自己的輸出文件定名為export.dmp,必須在命令行中指出要用的文件名。
增量導(dǎo)出包括三個類型:
(1)“完全”增量導(dǎo)出(Complete)
即備份整個數(shù)據(jù)庫,比如:
$exp system/manager inctype=complete file=990702.dmp
(2)“增量型”增量導(dǎo)出
備份上一次備份后改變的數(shù)據(jù)。比如:
$exp system/manager inctype=incremental file=990702.dmp
(3)“累計型”增量導(dǎo)出(Cumulative)
累計型導(dǎo)出方式只是導(dǎo)出自上次“完全” 導(dǎo)出之后數(shù)據(jù)庫中變化了的信息。比如:
$exp system/manager inctype=cumulative file=990702.dmp
數(shù)據(jù)庫管理員可以排定一個備份日程表,用數(shù)據(jù)導(dǎo)出的三個不同方式合理高效地完成。比如數(shù)據(jù)庫的備份任務(wù)可作如下安排:
·星期一:完全導(dǎo)出(A)
·星期二:增量導(dǎo)出(B)
·星期三:增量導(dǎo)出(C)
·星期四:增量導(dǎo)出(D)
·星期五:累計導(dǎo)出(E)
·星期六:增量導(dǎo)出(F)
·星期日:增量導(dǎo)出(G)
如果在星期日,數(shù)據(jù)庫遭到意外破壞,數(shù)據(jù)庫管理員可按以下步驟來恢復(fù)數(shù)據(jù)庫:
第一步:用命令CREATE DATABASE重新生成數(shù)據(jù)庫結(jié)構(gòu);
第二步:創(chuàng)建一個足夠大的附加回段。
第三步:完全增量導(dǎo)入A:
$imp system./manager inctype= RECTORE FULL=Y FILE=A
第四步:累計增量導(dǎo)入E:
$imp system/manager inctype= RECTORE FULL=Y FILE =E
第五步:最近增量導(dǎo)入F:
$imp system/manager inctype=RESTORE FULL=Y FILE=F
<2>冷備份
冷備份發(fā)生在數(shù)據(jù)庫已經(jīng)正常關(guān)閉的情況下,當(dāng)正常關(guān)閉時會提供給我們一個完整的數(shù)據(jù)庫。冷備份是將關(guān)鍵性文件拷貝到另外位置的一種說法。對于備份Oracle信息而言,冷備份是最快和最安全的方法。冷備份的優(yōu)點是:
·是非??焖俚膫浞莘椒ǎㄖ恍杩截愇募?nbsp;
·容易歸檔(簡單拷貝即可)
·容易恢復(fù)到某個時間點上(只需將文件再拷貝回去)
·能與歸檔方法相結(jié)合,作數(shù)據(jù)庫“最新狀態(tài)”的恢復(fù)。
·低度維護,高度安全。
但冷備份也有如下不足:
·單獨使用時,只能提供到“某一時間點上”的恢復(fù)。
·在實施備份的全過程中,數(shù)據(jù)庫必須要作備份而不能作其它工作。也就是說,在冷備份過程中,數(shù)據(jù)庫必須是關(guān)閉狀態(tài)。
·若磁盤空間有限,只能拷貝到磁帶等其它外部存儲設(shè)備上,速度會很慢。
·不能按表或按用戶恢復(fù)。
如果可能的話(主要看效率),應(yīng)將信息備份到磁盤上,然后啟動數(shù)據(jù)庫(使用戶可以工作)并將所備份的信息拷貝到磁帶上(拷貝的同時,數(shù)據(jù)庫也可以工作)。冷備份中必須拷貝的文件包括:
·所有數(shù)據(jù)文件
·所有控制文件
·所有聯(lián)機REDO LOG文件
·Init.ora文件(可選)
值得注意的是冷備份必須在數(shù)據(jù)庫關(guān)閉的情況下進行,當(dāng)數(shù)據(jù)庫處于打開狀態(tài)時,執(zhí)行數(shù)據(jù)庫文件系統(tǒng)備份是無效的
下面是做冷備份的完整例子:
(1) 關(guān)閉數(shù)據(jù)庫$sqldba lmode=y
SQLDBA >connect internal;
SQLDBA >shutdown normal;
(2) 用拷貝命令備份全部的時間文件、重做日志文件、控制文件、初始化參數(shù)文件
SQLDBA >! cp < file > < backup directory >
(3) 重啟Oracle數(shù)據(jù)庫
$sqldba 正在看的ORACLE教程是:Oracle數(shù)據(jù)安全面面觀。lmode=y
SQLDBA >connect internal;
SQLDBA >startup;
<3>熱備份
熱備份是在數(shù)據(jù)庫運行的情況下,采用archivelog mode方式備份數(shù)據(jù)的方法。所以,如果你有昨天夜里的一個冷備份而且又有今天的熱備份文件,在發(fā)生問題時,就可以利用這些資料恢復(fù)更多的信息。熱備份要求數(shù)據(jù)庫在Archivelog方式下操作,并需要大量的檔案空間。一旦數(shù)據(jù)庫運行在archivelog狀態(tài)下,就可以做備份了。熱備份的命令文件由三部分組成:
1.?dāng)?shù)據(jù)文件一個表空間一個表空間地備份。
(1)設(shè)置表空間為備份狀態(tài)
(2)備份表空間的數(shù)據(jù)文件
(3)恢復(fù)表空間為正常狀態(tài)
2.備份歸檔log文件。
(1)臨時停止歸檔進程
(2)log下那些在archive redo log目標目錄中的文件
(3)重新啟動archive進程
(4)備份歸檔的redo log 文件
3.用alter database backup controlfile命令來備份拷貝文件
熱備份的優(yōu)點是:
·可在表空間或數(shù)據(jù)文件級備份,備份時間短。
·備份時數(shù)據(jù)庫仍可使用。
·可達到秒級恢復(fù)(恢復(fù)到某一時間點上)。
·可對幾乎所有數(shù)據(jù)庫實體作恢復(fù)。
·恢復(fù)是快速的,在大多數(shù)情況下在數(shù)據(jù)庫仍工作時恢復(fù)。
熱備份的不足是:
·不能出錯,否則后果嚴重。
·若熱備份不成功,所得結(jié)果不可用于時間點的恢復(fù)。
·因難于維護,所以要特別仔細小心,不允許“以失敗而告終”。
二)來自內(nèi)部的另外一個隱患--用戶管理以及密碼問題
在這里,其實作為一個差不多點的數(shù)據(jù)庫管理員都很清楚,Oracle數(shù)據(jù)庫本身就使用了很多種手段來加強數(shù)據(jù)庫的安全性,經(jīng)常見到的就有密碼,角色,權(quán)限等等。那么我們就從最簡單的DBSNMP說起:
Oralce數(shù)據(jù)庫如果采用典型安裝后,自動創(chuàng)建了一個叫做DBSNMP的用戶,該用戶負責(zé)運行Oracle系統(tǒng)的智能代理(Intelligent Agent),該用戶的缺省密碼也是“DBSNMP”。如果忘記修改該用戶的口令,任何人都可以通過該用戶存取數(shù)據(jù)庫系統(tǒng)?,F(xiàn)在我們來看一下該用戶具有哪些權(quán)限和角色,然后來分析一下該用戶對數(shù)據(jù)庫系統(tǒng)可能造成的損失。
啟動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管理用戶,然而,它卻具有兩個系統(tǒng)級權(quán)限:UNLIMITED TABLESPACE和CREATE PUBLIC SYNONYM。
看到這兩個權(quán)限你應(yīng)該馬上想到,這些都是安全隱患,尤其是UNLIMITED TABLESPACE,它是破壞數(shù)據(jù)庫系統(tǒng)的攻擊點之一。如果這時候你還依然認為,即使有人利用這個沒有修改的口令登錄進數(shù)據(jù)庫也造成不了什么損失的話,我就不得不提醒你:該用戶具有UNLIMITED TABLESPACE的系統(tǒng)權(quán)限,它可以寫一個小的腳本,然后惡意將系統(tǒng)用垃圾數(shù)據(jù)填滿,這樣數(shù)據(jù)庫系統(tǒng)也就無法運行,并將直接導(dǎo)致最終的癱瘓。目前很多數(shù)據(jù)庫系統(tǒng)都要求7X24的工作,如果出現(xiàn)了系統(tǒng)用垃圾數(shù)據(jù)填滿的情況,那么,等數(shù)據(jù)庫系統(tǒng)恢復(fù)時,恐怕不可挽回的損失已經(jīng)造成了。
可是除了DBSNMP還有很多其他的用戶,怎么辦呢?讓我們先看一下目前普遍存在于Oracle數(shù)據(jù)庫中的用戶管理問題:
(1)權(quán)限過大:對ORACLE數(shù)據(jù)庫編程和瀏覽的一般用戶常常具有DBA (數(shù)據(jù)庫管理員權(quán)限),能對數(shù)據(jù)庫系統(tǒng)做任何修改或刪除。
(2)安全性差:很多ORACLE用戶缺省存儲位置都在系統(tǒng)表空間,這樣不僅影響系統(tǒng)的正常工作,而且不同用戶的數(shù)據(jù)信息互相影響、透明,保密性差。隨著數(shù)據(jù)的不斷加入,有可能使整個數(shù)據(jù)庫系統(tǒng)崩潰。
(3)密碼有規(guī)律:在ORACLE調(diào)試初期形成的用戶名和密碼一致的不良習(xí)慣保留到現(xiàn)在;系統(tǒng)用戶SYS和SYSTEM的密碼也眾所皆知。
知道了這些普遍的“毛病”,我們怎么做呢?下面是我的一些建議:
(1)ORACLE DBA (數(shù)據(jù)庫管理員)的規(guī)范
·SUN Solaris操作系統(tǒng)下ORACLE用戶密碼應(yīng)嚴格保密,絕不該把密碼設(shè)成ORACLE;并指定專門的數(shù)據(jù)庫管理員定期修改。
·ORACLE初始化建立的SYS和SYSTEM系統(tǒng)管理員用戶密碼應(yīng)由原來MANAGER改成別的不易被記憶的字符串。
·ORACLE WEB SERVER的管理端口具備DBA瀏覽數(shù)據(jù)庫的能力,因此其管理者ADMIN的密碼也應(yīng)保密,不該把密碼設(shè)成MANAGER;并指定專門的數(shù)據(jù)庫管理員定期修改。
·ORACLE DBA最好在SUN SPARC服務(wù)器控制臺上用窗口式界面實現(xiàn)管理。前提是ORACLE用戶啟動服務(wù)器,然后在窗口式命令行下輸入SVRMGRM,即啟動了ORACLE SERVER MANAGER菜單式管理;用SYSDBA身份登錄后,就可做數(shù)據(jù)庫系統(tǒng)維護工作了
(2)SQL*PLUS編程用戶的規(guī)范
·存儲結(jié)構(gòu)的規(guī)范
考慮到用SQL*PLUS編程可實現(xiàn)各行各業(yè)、各公司、各部門多種多樣的應(yīng)用需求,我們的SQL*PLUS編程用戶也應(yīng)該朝這個方向規(guī)范:不同種類的應(yīng)用必須有不同的用戶;不同種類的應(yīng)用必須有不同的存儲位置,包括物理文件、缺省表空間、臨時表空間的創(chuàng)建和規(guī)劃:當(dāng)準備編寫某一較大規(guī)模(從ORACLE數(shù)據(jù)量和面向用戶量考慮)應(yīng)用程序時,首先應(yīng)該創(chuàng)建一個邏輯的存儲位置-表空間,同時定義物理文件的存放路徑和所占硬盤的大小。
①、物理文件缺省的存放路徑在/oracle_home/dbs下,在命令行下用UNIX指令df -k 可查看硬盤資源分區(qū)的使用情況。如果oracle_home使用率達90‰以上,而且有一個或多個正在看的ORACLE教程是:Oracle數(shù)據(jù)安全面面觀。較為空閑的硬盤資源分區(qū)可以利用,我們最好把物理文件缺省的存放路徑改到較為空閑的硬盤資源分區(qū)路徑下。在此路徑下我們可以這樣規(guī)劃資源物理文件的存儲:
xxx表空間
xxx行業(yè)/ xxx公司/ xxx 部門/ xxx 服務(wù).dbf
DEMO表空間
default_datafile_home1/col /elec/sys4/demo1.dbf
default_datafile_home1/col /elec/sys4/demo2.dbf
公司系統(tǒng)四部摹擬演示系統(tǒng)物理文件
HUMAN表空間
default_datafile_home1/col/elec/human/human.dbf
公司人事部人事管理系統(tǒng)物理文件
BOOK表空間
default_datafile_home1/col/elec/book/book.dbf
公司資料室圖書管理系統(tǒng)物理文件
QUESTION表空間
default_datafile_home1/col/elec/client/question.dbf
公司客戶服務(wù)部問題庫系統(tǒng)物理文件
PC表空間
default_datafile_home1/col/chaoxun/client/pc.dbf
公司PC機售后服務(wù)系統(tǒng)物理文件
……表空間
default_datafile_home2/……………………………
等等
說明:其中default_datafile_home1指oracle_home/dbs;default_datafile_home2指較為空閑的硬盤資源分區(qū)路徑。
②、物理文件的大小根據(jù)應(yīng)用系統(tǒng)的數(shù)據(jù)量、數(shù)據(jù)對象、程序包的多少來定。一般用于摹擬演示的小系統(tǒng),表空間初始的物理文件為2M即能滿足要求,如果信息量滿,還可以增加物理文件,擴充表空間(每次擴充大小也可暫定為2M);一般實際運行的應(yīng)用系統(tǒng)可適當(dāng)增加表空間初始的物理文件大小,但也不要一次分配太大(因為不易回收空間,卻易擴充空間),這也需要根據(jù)具體情況具體分析:信息量大、需長時間保存的應(yīng)用在條件允許情況下,表空間可以大到幾百M甚至上G;信息量小、短期經(jīng)常刷新的應(yīng)用,表空間可以控制在2M以下。
③、表空間的名稱應(yīng)該采用同系統(tǒng)應(yīng)用相似的英文字符或字符縮寫,表空間所對應(yīng)的一個或多個物理文件名也應(yīng)有相關(guān)性。不同用戶所處的缺省表空間不同,存儲的信息就不能互相訪問。這比把所有用戶信息都儲存在系統(tǒng)表空間,安全性大大提高了。如果用ORACLE WEB SERVER管理端口創(chuàng)建的用戶,其缺省和臨時表空間一定是系統(tǒng)表空間,DBA切記要改變用戶的缺省表空間。臨時表空間存放臨時數(shù)據(jù)段,處理一些排序、合并等中間操作,根據(jù)實際應(yīng)用的需求可以把它們放在專門創(chuàng)建的表空間里;如果系統(tǒng)表空間大,也可以把它們放在系統(tǒng)表空間。用戶創(chuàng)建的數(shù)據(jù)索引最好和數(shù)據(jù)文件分開存放在不同表空間,以減少數(shù)據(jù)爭用和提高響應(yīng)速度。
相關(guān)文章
Oracle11.2.0.1如何升級到11.2.0.3 Oracle同版本升級
這篇文章主要為大家詳細介紹了Oracle11.2.0.1如何升級到11.2.0.3的過程,Oracle同版本升級的方法,感興趣的小伙伴們可以參考一下2016-07-07oracle數(shù)據(jù)庫ORA-01196錯誤解決辦法分享
這篇文章主要介紹了oracle數(shù)據(jù)庫ORA-01196錯誤解決辦法分享,小編覺得還是挺不錯的,這里分享給大家,供需要的朋友參考。2017-10-10ORACLE DATAGUARD中手工處理日志v$archive_GAP的方法
從9i以后,oracle dataguard 備庫一般都不需要手工處理丟失的日志,F(xiàn)AL自動會幫我們處理,本文主要通過個案例來講下手工處理丟失的日志的方法。2014-08-08Oracle生成不重復(fù)票號與LPAD,RPAD與NEXTVAL函數(shù)解析
這篇文章主要介紹了Oracle生成不重復(fù)票號與LPAD,RPAD與NEXTVAL函數(shù)解析,小編覺得還是挺不錯的,這里分享給大家,供需要的朋友參考。2017-10-10使用PLSQL遠程連接Oracle數(shù)據(jù)庫的方法(內(nèi)網(wǎng)穿透)
Oracle數(shù)據(jù)庫來源于知名大廠甲骨文公司,是一款通用數(shù)據(jù)庫系統(tǒng),能提供完整的數(shù)據(jù)管理功能,而Oracle數(shù)據(jù)庫時關(guān)系數(shù)據(jù)庫的典型代表,其數(shù)據(jù)關(guān)系設(shè)計完備,這篇文章主要介紹了使用PLSQL遠程連接Oracle數(shù)據(jù)庫的方法(內(nèi)網(wǎng)穿透),需要的朋友可以參考下2023-03-03