當今大多數 Web 應用程序都需要至少采用某種基本的安全策略。例如,提供用口令保護的內容的網站、僅具有治理員后端的網站、網志和個人雜志、電子商務網站、企業內聯網,等等。 構建這些類型的 Web 應用程序最常用的設計方法是將安全策略整合到 Web 應用程序的業務邏輯中,即由應用程序決定某個用戶是否有權訪問數據庫中的某個數據。在這種情形下,數據庫的角色僅為存儲數據和依請求提供數據。換句話說,假如 Web 應用程序命令數據庫提供特定信息,則數據庫會直接執行該命令而不檢查用戶的權限。 在該文中,您將學習如何利用 Oracle 內置的安全特性在數據庫級執行應用程序安全規則,以提高應用程序的整體安全性。作為附帶的好處,直接在數據庫中實現數據訪問安全不但有助于提高應用程的安全性,而且有助于降低復雜性。
對數據庫端安全性的需求
從 Web 應用程序控制數據訪問會怎么樣?大多數情況下沒有問題;這是個不錯的解決方案,尤其是在涉及的數據為非任務要害或絕密的時候。許多書和在線資源中都用到了該方法。實際上,有本很受歡迎的 php/MySQL 書明確反對每個應用程序創建一個以上的數據庫用戶帳戶,這是因為“額外的用戶或復雜的權限會因某個操作在繼續前要檢查更多的信息而降低 MySQL 的執行速度”。確實如此;但是,在放棄將安全性整合到數據庫邏輯中的想法前可能要考慮幾件事情。我們來看以下示例。 假設創建一個內容治理系統 (CMS)。其中使用數據庫來存儲網站上發布的內容。大部分數據是公開的,答應匿名 Web 用戶讀?。坏淮饝庉嫺臄祿?。使用單一數據庫帳戶訪問和修改數據庫中的記錄,并通過用口令保護僅治理員可以訪問的頁面的訪問權限用 PHP 代碼控制安全性。 假如 Web 應用程序的公共端遭受了一個諸如公共搜索表單(即編碼不夠嚴密的表單)上的 SQL 注入的攻擊,則該入侵者可能能夠對該公共帳戶可以訪問的數據庫對象執行任意 SQL 語句。當然,就這里的情形而言,執行 SELECT 語句不會造成什么大問題,這是因為數據本來就是公共的。但由于公共權限和治理權限使用同一數據庫帳戶,因此入侵者還能執行 UPDATE 和 DELETE 語句,甚至是從數據庫中刪除表。 怎么才能防止該情況的發生呢?最簡單的方法就是徹底限制公共數據庫帳戶修改數據的權限。我們來看看 Oracle 是如何解決這個問題的。
Oracle 安全性基本概述
Oracle 數據庫為 Web 開發人員提供了控制數據訪問的許多方法,從治理對特定數據庫對象(如表、視圖和過程)的訪問到控制個別行或列的數據的訪問。很顯然,對 Oracle 每個安全特性或可用選項的討論超出了本文的范圍。在這里,我們將不涉及過多細節,而僅介紹 Oracle 數據訪問安全性的最基本方面: