賬戶方案系統(tǒng)角色多管齊下保障Oracle的安全
一、賬戶與系統(tǒng)角色結(jié)合,提高了賬戶的安全性。
賬戶是定義在數(shù)據(jù)庫系統(tǒng)中的一個名稱,它是數(shù)據(jù)庫的基本訪問控制機制。當連接到Oracle數(shù)據(jù)庫時,跟其他數(shù)據(jù)庫一樣,需要用戶輸入用戶名與密碼。數(shù)據(jù)庫系統(tǒng)就是憑借這個用戶名來授予其相應的數(shù)據(jù)庫訪問權(quán)限。不過,這跟其他數(shù)據(jù)庫又有所不同。因為Oracle數(shù)據(jù)庫有有一類很特殊的賬戶-特權(quán)賬戶。這些特權(quán)賬戶具有某些比較特殊的權(quán)限。為了數(shù)據(jù)庫的安全,他們除了在數(shù)據(jù)庫中要擁有某些特定的權(quán)限之外,還必須擁有操作系統(tǒng)對應的權(quán)限。數(shù)據(jù)庫與操作系統(tǒng)一起,來保障數(shù)據(jù)庫的安全。
如在Oracle數(shù)據(jù)庫中,主要有兩類特權(quán)用戶,分別為SYSDBA與SYSOPER。這兩類用戶主要用用來執(zhí)行一些特殊的作業(yè)。如啟動關閉數(shù)據(jù)庫、建立數(shù)據(jù)庫、備份與恢復操作等等。這些作業(yè)明顯會直接影響到數(shù)據(jù)庫的正常作業(yè);而且備份恢復操作還直接跟數(shù)據(jù)庫數(shù)據(jù)安全息息相關。為了保障這些特權(quán)賬戶的安全,Oracle數(shù)據(jù)庫還采用了一些特殊機制。如Oracle要求,除了在數(shù)據(jù)庫中要擁有對應的權(quán)限之外,還必須在操作系統(tǒng)中也是某些特定角色的成員。例如,Oracle數(shù)據(jù)庫若是部署在微軟的操作系統(tǒng)下,則安全成功后,在操作系統(tǒng)的角色中,會多SYSDBA與OSOPER兩個組。特權(quán)賬戶必須要屬于這兩個組,才能夠進行如上所述的一些數(shù)據(jù)庫維護作業(yè)。同理,在Linux等其他操作系統(tǒng)平臺下,也需要具有類似的權(quán)限。通過這種策略,特權(quán)賬戶的安全就又多了一個保障。如數(shù)據(jù)庫管理員只想使用特權(quán)賬戶SYSDBA來管理維護數(shù)據(jù)庫,而不需要SYSOPER賬戶。此時,數(shù)據(jù)庫管理員就有兩個選擇。要么在數(shù)據(jù)庫中禁用這個賬戶;要么在操作系統(tǒng)中把這個賬戶從Oracle建立的組中剔除出去。
雖然SYSOPER與SYSDBA賬戶都是屬于特權(quán)賬戶,但是他們的權(quán)限還是由差異的。如特權(quán)賬戶SYSDBA具備了特權(quán)賬戶SYSOPER的所有權(quán)限之外,還具有建立數(shù)據(jù)庫、執(zhí)行不完全恢復等權(quán)限。同時,前者還自動具備了DBA角色的所有權(quán)限;而后者則不具備DBA角色的權(quán)限。為了數(shù)據(jù)庫庫的安全,通常情況下不能夠把這些特權(quán)賬戶的權(quán)限賦予給其他用戶。雖然可以通過更改初始化參數(shù)來突破這個限制,但是出于數(shù)據(jù)庫的安全考慮,我們都不建議這么處理。
可見,特權(quán)賬戶與操作系統(tǒng)固定權(quán)限結(jié)合,雙管齊下,來保障數(shù)據(jù)庫的安全,這是Oracle數(shù)據(jù)庫的一個突破。其在很大程度上,提高了特權(quán)賬戶的安全性。若是普通賬戶,則沒有這方面的限制。
二、賬戶與方案一一對應保障Oracle安全。
除了賬戶與系統(tǒng)角色結(jié)合,來提高賬戶安全性之外,Oracle數(shù)據(jù)庫另外一個值得稱頌的地方就是把賬戶與方案聯(lián)系起來,進一步提高了賬戶的安全性。
在Oracle數(shù)據(jù)庫中,方案是用戶所擁有數(shù)據(jù)庫對象的集合。這是因為在Oracle數(shù)據(jù)庫中對象是以用戶來組織的,用戶與方案是一一對應的,并且兩者所使用的名稱相同。利用Oralce數(shù)據(jù)庫與實例安裝完成后,其默認情況下有兩個用戶,分別為SYSTEM與SCOTT。他們分別對應了兩個方案SYSTEM與SCOTT。Oracle數(shù)據(jù)庫就是賬戶與方案一起,來提高數(shù)據(jù)庫訪問的安全性。
如用戶可以直接訪問其自己的方案對象,但是如果需要訪問其他用戶的方案對象時,則需要具有相關的權(quán)限。如用戶SCOTT,其方案SCOTT下所有的數(shù)據(jù)庫對象都可以進行訪問。但是,如果SCOTT用戶想訪問方案SYSTEM下面的數(shù)據(jù)庫對象,則需要先經(jīng)過用戶SYSTEM進行授權(quán)。如果他沒有把這個訪問的權(quán)限授權(quán)給SCOTT的話,則用戶SCOTT就無法訪問方案SYSTE下面的任何一個數(shù)據(jù)庫對象。所以,方案就好像一個個保護罩,又把數(shù)據(jù)庫邏輯的分割成幾個獨立的區(qū)域。這個區(qū)域的主人可以任意訪問內(nèi)部的任何數(shù)據(jù)庫對象。若其他用戶想要訪問這個區(qū)域的話,則必須要先經(jīng)過這個區(qū)域主人的授權(quán)。這一個個區(qū)域(方案)是用戶的私人領地,未經(jīng)允許他人不得進入。通過這種方式,用戶就可以保護自己所建立數(shù)據(jù)對象的安全。
在使用方案是,需要注意一些細節(jié)方面的問題。如在同一個方案中,不能夠存在同名的對象;但是在不同的方案中,不同用戶可以建立同名的對象。還有當某個用戶要訪問其他方案的對象時,必須加入方案名最為前綴。也就說,要在數(shù)據(jù)庫對象名之前加入主人的名字。這些是硬性規(guī)則,不能夠打折扣。
三、新用戶沒有任何數(shù)據(jù)庫操作權(quán)限。
Oracle賬戶與SQLServer賬戶還有一個不同之處。就是在Oracle數(shù)據(jù)庫中建立新賬戶后,默認情況下,這個賬戶不具備任何數(shù)據(jù)庫操作的權(quán)限。但是,在SQLServer中則不同。在SQLServer中,若建立賬戶,其默認會繼承一定的權(quán)限。
在Oracle數(shù)據(jù)庫中,常常通過采用數(shù)據(jù)庫驗證的方式來建立數(shù)據(jù)庫用戶。采取這個方式,其優(yōu)勢是非常明顯的。如用戶賬戶與其身份驗證都是由數(shù)據(jù)庫控制,而不要借助任何的外部力量。另外,數(shù)據(jù)庫系統(tǒng)還提供了嚴格的口令管理策略以加強口令的安全性,還提供了諸如賬戶鎖定、口令有效期等安全策略。
在建立賬戶的時候,主要通過三個措施來提高新建賬戶的安全性。
一是初始建立的數(shù)據(jù)庫賬戶并不具有任何的權(quán)限,不能夠執(zhí)行任何的數(shù)據(jù)庫操作。如連連接數(shù)據(jù)庫的權(quán)限都沒有,需要另外配置權(quán)限。這雖然增加了一些維護的工作量,但是畢竟提高了初始賬戶的安全性能給。因為賬戶的建立不會經(jīng)常發(fā)生,所以相比數(shù)據(jù)庫安全來說,這點付出還是值得的。
二是在新建賬戶時,必須要為數(shù)據(jù)庫賬戶設置密碼,不能夠使用空密碼。這是一個很好的安全措施,因為空口令的賬戶是數(shù)據(jù)庫安全的一個定時炸彈。據(jù)筆者所知,在SQLServer數(shù)據(jù)庫中就好像沒有類似的限制。數(shù)據(jù)庫管理員在建立新賬戶時可以不設置初始化密碼,這是非常危險的操作方法。
三是通過表空間配額來限制其創(chuàng)建數(shù)據(jù)庫庫對象的權(quán)利。在建立用戶時,如果沒有為新用戶指表空間配額,則用戶在特定的表空間上的配額就為0。也就是說,用戶在這個表空間上沒有存儲的空間。為此,這個用戶當然就無法在這個表空間上建立數(shù)據(jù)對象。即使后續(xù)通過權(quán)限賦予其足夠的權(quán)限,其最多只是查詢、使用數(shù)據(jù)庫對象,而無法創(chuàng)建屬于自己的數(shù)據(jù)庫對象。這也是提高新建用戶安全性的措施之一。用戶不能夠隨便在表空間中建立數(shù)據(jù)庫對象,有利于保證數(shù)據(jù)庫的干凈。另外需要說明的是,如果在建立賬戶的時候,沒有給用戶指定具體的表空間,則其默認的表空間為System表空間。這看起來是一個很危險的操作,其實卻不然。因為上面筆者談到過,用戶若要訪問其他用戶所創(chuàng)建的方案時,必須擁有其他用戶的相應授權(quán)。所以雖然新用戶屬于System表空間,但是不一定說其可以訪問System表空間中的數(shù)據(jù)庫對象。若要訪問,還需要用戶進行分別授權(quán)。
可見,賬戶與方案這一一對應的關系,在很大程度上提高了賬戶的安全性。而特權(quán)賬戶與操作系統(tǒng)角色結(jié)合,也限制了特權(quán)賬戶的操作權(quán)限。這些措施,都有利于提高數(shù)據(jù)庫賬戶的安全。賬戶、方案、系統(tǒng)角色多管齊下,保障了Oracle數(shù)據(jù)庫的安全。
相關文章:
