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