讓你的應用程序不再對數據庫的改動“感冒”(一)

原著作者:Jim Czuprynski

大綱<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

ORACLE數據庫對象的改動,使得應用程序中用到的數據對象在某段時間內處於無效狀態,從而帶來致命的錯誤。本文討論些技術,可供DBA在實際應用中竟可能地降低數據庫改動和應用程序間的衝突。

正如古時的一位著名哲學家說的那樣“唯一不變的就是變化”。DBA的職責就是要控制數據庫的變動,使之有序。依賴於你的IT團隊的穩定性和你們開發和支持應用的穩定性,你們可以從容應付每天甚至於每時每刻地呼叫,需要變動數據庫結構。

自從我負責爲客戶的數據庫系統提供24(小時)×7(天)的支持以後,其中一個工作就是我非常關注讓我們的應用能夠提供持續的穩定的性能而不需要特定的數據庫維護。而且,我發現只要事先規劃周密,我可以建立一個安全層來讓應用和它們要訪問的數據庫對象是絕緣的。

安全層

使用基本的視圖來隔離應用

就其形式來看,一個基本的視圖只不過是一個view引用了表中的所有列。當創建了一個新的表後,我一般會馬上創建一個基本視圖和爲這個視圖創建一個公共同義詞(public synonym),然後,把必要的對象訪問權限授權給適當的角色。

既然oracle允許用DML語句直接操作基本表,那我可以把DML重定位到基本視圖上從而替代基本表。下面就是一個例子在HR DEMO的模式下,有一個EMPLOYEES的表,我授予了角色OLTPROLE完全訪問視圖的權利

使用基本視圖的最大好處就是我可以把精力集中在應用的讀寫數據上,與此同時也把應用同破壞性的DROP TABLE和TRUNCATE語句隔離。同時,我也防止了那些“低級DBA”和“過分熱心的開發者”在匆忙或意外地刪除了重要的數據庫對象。

忠告:注意如果往基本表了添加了新的列,基本視圖中是不會自動添加這個列的,除非重新把編譯基本視圖。這是把雙刃劍,當你達到了隔離應用與數據庫對象的變動,但同時也不能立即得到新增加的列。而且,要記住,字段上的約束是不包括在基本視圖中的(例如:列有一個NOT NULL的約束而且沒有提供缺省值,或者有一個CHECK約束),發出的INSERT語句會失敗。

使用基本視圖隔離應用訪問指定的數據

既然可以爲視圖的列指定別名,我們可以利用這個特性來限制用戶返回的數據。我們還是使用EMPLOYEES這個表,我想限制OLTPUSER角色只能訪問必需的列,換句話說,在插入一條僱員信息的時候只需要填寫那些非空的必需列。

現在我以OLTPUSER用戶對基本視圖bv_employee執行DML語句,增加記錄的時候只需要必要的信息。

[email protected]        12/31/1999 00:00:00 FI_ACCOUNT     

 

未完待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章