文章詳情頁
Oracle許可執(zhí)行安全模式更好實現(xiàn)控制
瀏覽:8日期:2023-11-12 19:39:54
Oracle許可安全(grant security)有這樣的一個缺點,要維護所有的訪問角色并將這些角色分配給最終用戶是非常困難的。為了解決這些問題并簡化Oracle的安全模式,Oracle引入了許可執(zhí)行方法(grant execute method)。使用許可執(zhí)行方法,所有的數(shù)據(jù)訪問代碼都會被封裝進Oracle的存儲過程里,而最終用戶會被賦予執(zhí)行這段代碼的能力。 許可執(zhí)行安全模式的設(shè)計 同特定的許可模式(在這個模式下,特定的數(shù)據(jù)庫權(quán)限被賦予特定的用戶)不同,許可執(zhí)行模式答應(yīng)用戶被賦予執(zhí)行的訪問權(quán),而不需要任何數(shù)據(jù)庫的權(quán)限。在Oracle里,這叫做定義者的權(quán)利(definer right)。當(dāng)代碼被執(zhí)行的時候,最終用戶就取得了存儲過程定義者對數(shù)據(jù)庫的訪問權(quán)限。同標(biāo)準(zhǔn)的許可安全模式相比,定義者權(quán)利具有多個重要的優(yōu)勢,主要是訪問規(guī)則的簡化。 在Oracle里,你可能也會使用調(diào)用者權(quán)利(invoker right),通過它,最終用戶將只能使用由標(biāo)準(zhǔn)許可安全模式所分配的權(quán)限來執(zhí)行存儲過程。調(diào)用者權(quán)利要更復(fù)雜一些(這也是很多Oracle設(shè)計者更不愿意看到的),因為還必須實現(xiàn)Oracle許可安全。 很明顯,許可執(zhí)行模式需要仔細(xì)的前期設(shè)計。開發(fā)人員必須被迫遵照設(shè)計標(biāo)準(zhǔn),創(chuàng)建Oracle存儲過程和函數(shù),它們?nèi)缓髸环庋b進程序包里。 從操作過程上講,這要求Oracle的設(shè)計人員為系統(tǒng)預(yù)先確定過程碼(process code),并定義一組執(zhí)行所有數(shù)據(jù)庫訪問和處理的程序包。 許可執(zhí)行安全模式的好處 許可執(zhí)行模式尤其引起了Oracle設(shè)計者的關(guān)注,因為它還有其他幾個好處: 所有的過程碼和SQL都被保存在數(shù)據(jù)字典里。 許可執(zhí)行模式答應(yīng)所有的SQL和程序都駐留在數(shù)據(jù)字典里,在這里它們能夠被很輕易地找到、修改和調(diào)整。 很輕易就能夠通過過程碼來實現(xiàn)快速執(zhí)行。 在Oracle9i里,所有的存儲過程都能夠被編譯,還能夠使用dbms_shared_pool.keep過程被放在在Oracle的庫緩沖區(qū)里。這就實現(xiàn)了應(yīng)用程序代碼的超高速執(zhí)行。 數(shù)據(jù)和行為的耦合 將代碼封裝進Oracle的存儲過程里使得Oracle的設(shè)計人員能夠?qū)?shù)據(jù)庫實體同作用于這些實體的代碼緊密地耦合在一起。例如,Oracle的成員方法(member method)能夠為客戶表格而創(chuàng)建,這樣Oracle就知道數(shù)據(jù)庫同什么代碼相關(guān)聯(lián)。這同面向?qū)ο蟮哪P褪窍嗤模诿嫦驅(qū)ο蟮哪P屠铮椒ㄊ峭珻++或者Java對象的類相關(guān)聯(lián)的。 數(shù)據(jù)庫代碼的隔離 由于最終用戶的屏幕上沒有過程代碼或者SQL,因此所有對數(shù)據(jù)庫的訪問都是通過調(diào)用標(biāo)準(zhǔn)的存儲過程而實現(xiàn)的。這就使得應(yīng)用程序不再依靠于數(shù)據(jù)庫,這意味著該應(yīng)用程序能夠被輕易地移植到另一個數(shù)據(jù)庫,而不要對前端的代碼作出任何修改。 數(shù)據(jù)訪問的嚴(yán)密控制 通過使用定義者權(quán)利,最終用戶只有在使用存儲過程和函數(shù)的情況下才能夠訪問數(shù)據(jù)庫。這就使得過程代碼能夠嚴(yán)密地控制訪問規(guī)則并消除任何從后門對數(shù)據(jù)庫的訪問。許可執(zhí)行模式所能做到的還不止對Oracle表格的訪問控制。由于存儲過程會控制對數(shù)據(jù)庫的訪問,因此存儲過程能夠定義過程規(guī)則,而最終用戶需要這些規(guī)則才能夠看到Oracle的數(shù)據(jù)。行這一層、列這一層,以及依靠于數(shù)據(jù)的訪問規(guī)則都是在Oracle存儲過程的PL/SQL或者Java內(nèi)被編碼的。 拒絕后門 最終用戶只有在其執(zhí)行存儲過程的時候才擁有對數(shù)據(jù)庫的(訪問)權(quán)限,超出了其過程的范圍,他們就無法訪問Oracle了。 和所有的Oracle安全模式一樣,許可執(zhí)行模式不是沒有局限性的。現(xiàn)在讓我們來看看其中的一些。 許可執(zhí)行安全模式的局限性 許可執(zhí)行安全模式最適合于正式的系統(tǒng)設(shè)計項目,在這樣的項目里,項目分析人員會在開始編程之前仔細(xì)地規(guī)劃訪問代碼和規(guī)則。許可執(zhí)行模式的主要局限性有: 需要仔細(xì)的前期設(shè)計 專用系統(tǒng)的開發(fā)并不是很輕易就能夠?qū)崿F(xiàn)的,因為其設(shè)計需要對主要的程序包、存儲過程和函數(shù)預(yù)先進行定義。 可選的過程語言有限 Oracle的函數(shù)和存儲過程的代碼需要在PL/SQL或者Java里編寫。但是,有些Oracle的設(shè)計人員要求只有SQL才能夠被保存在存儲過程里。這就使得開發(fā)人員能夠使用他們所希望使用的任何過程語言。前端并沒有被要求完全獨立于代碼,它包含有過程代碼,但是所有的數(shù)據(jù)庫SQL都會被存儲過程和函數(shù)調(diào)用所替代。 難以審計 由于最終用戶只有在執(zhí)行存儲過程的時候才能夠具有訪問數(shù)據(jù)庫的權(quán)限,因此創(chuàng)建列表來包括數(shù)據(jù)庫實體以及那些能夠訪問這些數(shù)據(jù)庫實體的最終用戶是很困難的。對定義者權(quán)利和許可執(zhí)行安全的審計需要你編寫復(fù)雜的審計程序,以剖析和解釋這些存儲過程。 許可的執(zhí)行 正如你能夠看到的,許可執(zhí)行這一方法同傳統(tǒng)的許可安全模式相比具有很多優(yōu)勢,但是它也存在某些不足之處。由于Oracle是世界上最強大和最靈活的數(shù)據(jù)庫,所以你還有其他的方法來控制用戶對數(shù)據(jù)的訪問。Oracle為數(shù)據(jù)訪問的控制提供了很多選擇,而你的任務(wù)就是去選擇和實現(xiàn)能夠滿足你設(shè)計要求的最佳訪問控制法。
標(biāo)簽:
Oracle
數(shù)據(jù)庫
排行榜
