熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

利用Oracle的同意安全機制來控制訪問

2013-11-13 22:13:50  來源: Oracle 

  Oracle提供用於控制數據訪問規則的多種方式包括
  
  同意安全機制(比如系統對象作用的優先特權)
  
  同意執行安全(比如定義和觸發特權)
  
  虛擬私有數據庫(VPD)
  
  Ntier的驗證(比如RADIUS的驗證服務器)
  
  現在讓我們通過查看同意安全機制來開始一些最基本的知識並了解安全機制的優點和缺欠原始關系模型為用戶提供了用於訪問控制的同意特權的方法這一模型最初是由EF Codd描述並成為了多種商業關系數據庫交叉的標准
  
  Oracle同意安全機制具有多種形式對象同意系統特權同意以及基於功能的同意這一形式的主要目的是使數據庫中的用戶可以批准訪問特定數據對象來控制數據訪問
  
  Oracle安全機制
  這是用於數據控制的Oracle設計的多章節的第二部分如果你還沒有閱讀這一部分可以先查看這一文章系列的第一部分《從開始就注意Oracle設計的安全性》
  
  對象特權
  對象特權分配執行一個特定對象的特定操作權利這裡提供了對象特權分配的范例
  
  同意選擇在用戶插入fred mary joe
  
  在定制列表中執行同意插入
  
  同意所有的用戶執行fred
  
  同意用戶查閱中對mary的選擇
  
  你可以看到對象特權的直接分配需要Oracle數據庫用戶的每一對象的特定同意如果你有個列表和個用戶的數據庫這就需要獨立的同意聲明來分配安全機制
  
  系統特權
  系統特權包括很多訪問方式比如任何列表的選擇系統特權同意的范例包括以下
  
  同意建立任何簇(cluster)用於customer_role
  
  同意選擇任何列表用於fred
  
  同意建立任何列表
  
  同意建立tablespace用於dba_role
  
  顯然系統特權應該只限於安全級別不是很高的情況因為一個簡單的同意聲明可以將列表上的所有安全機制去掉
  
  基於功能的安全機制
  功能安全機制可以允許你將相關的同意機制歸為一個集合由於功能機制是一個定義好的特權集合特權分配給用戶就會變得相當容易比如以下范例
  
  建立all_customer的功能安全機制
  
  同意all_customer的選擇更新
  
  同意all_customer選擇item_table
  
  功能安全機制的優點在於它的明顯性這是因為功能安全機制允許你定義一套訪問規則然後分配給合適的用戶
  
  然而與VPD安全機制不一樣執行數據訪問的復雜規則是不可能的
  
  同意安全機制的設計
  如果你要執行Oracle數據庫的安全機制你必須做一些仔細的前期計劃以確保每一功能都滿足不同用戶的訪問而且功能上不沖突設計同意安全機制的步驟如下
  
      定義所有已經的不同類別的用戶的功能
  
      定義每種功能的訪問規則
  
      定義所有行列的訪問限制
  
      建立所有數據訪問的查看
  
      分配功能的查看
  
      分配用戶的功能
  
  為了減少功能重復的可能性很多Oracle設計者建立功能的等級性如圖A所示
  
  
圖A

  

  用戶組訪問
  可以注意到程序員和分析任務之間訪問特權的重復性程序員必須非常地注意訪問的要點
  
  在實際操作中功能的設計可能會變得復雜
  
  行和列訪問的設計
  在實際設計中同意訪問整個列表並不是很簡單通常你需要在一個列表內限制特定行的訪問唯一可實現的方法是建立每一行的限制獨立查看然後將查看分配給用戶功能例如假設你是做基於下面商業規則的設計功能
  
  只有管理者才能查看雇員的工資列(列限制)
  
  其他雇員只能查看雇員名字和電話號碼(行限制)
  為了能夠在Oracle中使用功能安全機制來執行這一設計可以采用以下步驟
  
  建立管理者和雇員的基本功能
  
  建立合適的查看
  
  同意功能的查看
  
  在Oracle中表A說明了這一設計
  
  現在你可以分配合適的同意聲明然後測試查看結果並看看它們是怎麼工作(表B)
  
  同意安全機制的漏洞
  設計中同意安全機制產生漏洞有很多觀點包括
  
  分配同意給PUBLIC
  
  使用WITH ADMIN選擇分配功能
  
  重復未設計的訪問功能
  
  分配系統特權給功能
  
  建立公共的同義字
  
  例如在Oracle中你可以明確將權利賦予公用的列表這樣就可以具備只讀訪問這種系統特權取代了功能安全機制並生成了漏洞如下所示
  
  生成pubscustomer的公用同字義的用戶
  
  同意用戶的公用選擇
  
  另一個重要漏洞是列表的公用同義字請記住Oracle在缺省情況下是nobody除非是對象允許執行列表的任何操作同樣列表名稱必須在SQL中定義如表C所示
  
  現在當你與一個名為SCOTT的用戶連接他是不能看到列表的行如表D中的例子所示
  
  在這種情況下你知道列表是存在的但Oracle只承認有權限的列表名稱(可參見表 E)
  
  復雜性
  從表面上看設計Oracle數據庫的同意安全機制很復雜本文中提到的觀點提供了建立Oracle安全機制的新方法以及同意執行模型和VPD在下面兩個章節裡我將會檢查采用這些新方法的數據庫設計
From:http://tw.wingwit.com/Article/program/Oracle/201311/18544.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.