一、賬戶與系統角色結合,提高了賬戶的安全性。
賬戶是定義在數據庫系統中的一個名稱,它是數據庫的基本訪問控制機制。當連接到Oracle數據庫時,跟其他數據庫一樣,需要用戶輸入用戶名與密碼。數據庫系統就是憑借這個用戶名來授予其相應的數據庫訪問權限。不過,這跟其他數據庫又有所不同。因為Oracle數據庫有有一類很特殊的賬戶-特權賬戶。這些特權賬戶具有某些比較特殊的權限。為了數據庫的安全,他們除了在數據庫中要擁有某些特定的權限之外,還必須擁有操作系統對應的權限。數據庫與操作系統一起,來保障數據庫的安全。
如在Oracle數據庫中,主要有兩類特權用戶,分別為SYSDBA與SYSOPER。這兩類用戶主要用用來執行一些特殊的作業。如啟動關閉數據庫、建立數據庫、備份與恢復操作等等。這些作業明顯會直接影響到數據庫的正常作業;而且備份恢復操作還直接跟數據庫數據安全息息相關。為了保障這些特權賬戶的安全,Oracle數據庫還采用了一些特殊機制。如Oracle要求,除了在數據庫中要擁有對應的權限之外,還必須在操作系統中也是某些特定角色的成員。例如,Oracle數據庫若是部署在微軟的操作系統下,則安全成功后,在操作系統的角色中,會多SYSDBA與OSOPER兩個組。特權賬戶必須要屬于這兩個組,才能夠進行如上所述的一些數據庫維護作業。同理,在Linux等其他操作系統平臺下,也需要具有類似的權限。通過這種策略,特權賬戶的安全就又多了一個保障。如數據庫管理員只想使用特權賬戶SYSDBA來管理維護數據庫,而不需要SYSOPER賬戶。此時,數據庫管理員就有兩個選擇。要么在數據庫中禁用這個賬戶;要么在操作系統中把這個賬戶從Oracle建立的組中剔除出去。
雖然SYSOPER與SYSDBA賬戶都是屬于特權賬戶,但是他們的權限還是由差異的。如特權賬戶SYSDBA具備了特權賬戶SYSOPER的所有權限之外,還具有建立數據庫、執行不完全恢復等權限。同時,前者還自動具備了DBA角色的所有權限;而后者則不具備DBA角色的權限。為了數據庫庫的安全,通常情況下不能夠把這些特權賬戶的權限賦予給其他用戶。雖然可以通過更改初始化參數來突破這個限制,但是出于數據庫的安全考慮,我們都不建議這么處理。
可見,特權賬戶與操作系統固定權限結合,雙管齊下,來保障數據庫的安全,這是Oracle數據庫的一個突破。其在很大程度上,提高了特權賬戶的安全性。若是普通賬戶,則沒有這方面的限制。
二、賬戶與方案一一對應保障Oracle安全。
除了賬戶與系統角色結合,來提高賬戶安全性之外,Oracle數據庫另外一個值得稱頌的地方就是把賬戶與方案聯系起來,進一步提高了賬戶的安全性。
在Oracle數據庫中,方案是用戶所擁有數據庫對象的集合。這是因為在Oracle數據庫中對象是以用戶來組織的,用戶與方案是一一對應的,并且兩者所使用的名稱相同。利用Oralce數據庫與實例安裝完成后,其默認情況下有兩個用戶,分別為SYSTEM與SCOTT。他們分別對應了兩個方案SYSTEM與SCOTT。Oracle數據庫就是賬戶與方案一起,來提高數據庫訪問的安全性。
如用戶可以直接訪問其自己的方案對象,但是如果需要訪問其他用戶的方案對象時,則需要具有相關的權限。如用戶SCOTT,其方案SCOTT下所有的數據庫對象都可以進行訪問。但是,如果SCOTT用戶想訪問方案SYSTEM下面的數據庫對象,則需要先經過用戶SYSTEM進行授權。如果他沒有把這個訪問的權限授權給SCOTT的話,則用戶SCOTT就無法訪問方案SYSTE下面的任何一個數據庫對象。所以,方案就好像一個個保護罩,又把數據庫邏輯的分割成幾個獨立的區域。這個區域的主人可以任意訪問內部的任何數據庫對象。若其他用戶想要訪問這個區域的話,則必須要先經過這個區域主人的授權。這一個個區域(方案)是用戶的私人領地,未經允許他人不得進入。通過這種方式,用戶就可以保護自己所建立數據對象的安全。
在使用方案是,需要注意一些細節方面的問題。如在同一個方案中,不能夠存在同名的對象;但是在不同的方案中,不同用戶可以建立同名的對象。還有當某個用戶要訪問其他方案的對象時,必須加入方案名最為前綴。也就說,要在數據庫對象名之前加入主人的名字。這些是硬性規則,不能夠打折扣。