精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Oracle handbook系列之虛擬專用數據庫VPD的使用詳解

數據庫 Oracle
本文我們主要介紹了Oracle handbook系列之虛擬專用數據庫VPD的使用,并通過詳細的例子對其使用方法進行了演示與說明,希望能夠對您有所幫助。

Oracle handbook系列之虛擬專用數據庫VPD的使用是本文我們主要要介紹的內容,VPD,Oracle Virtual Private Database,即Oracle虛擬專用數據庫,是指通過應用一些策略,使得用戶只能訪問被允許訪問的那部分數據。其原理相對簡單,Oracle根據策略自動為相應用戶提交的語句添加Where句,從而控制用戶可以訪問和操作的數據。

首先我們準備演示用的幾張表,并插入少量的測試數據:

  1. CREATETABLEvpdsample_clothing(  
  2. clothing_idNUMBER,  
  3. typeVARCHAR2(30),  
  4. brandVARCHAR2(30),  
  5. descriptonVARCHAR2(100)  
  6. );  
  7. --  
  8. INSERTINTOvpdsample_clothingVALUES(10002,'jacket','ABC','autumnstyle');  
  9. INSERTINTOvpdsample_clothingVALUES(10003,'t-shirt','XYZ','summerstyle');  
  10. commit;  
  11. CREATETABLEvpdsample_books(  
  12. book_idNUMBER,  
  13. nameVARCHAR2(30),  
  14. authorVARCHAR2(20)  
  15. );  
  16. --  
  17. INSERTINTOvpdsample_booksVALUES(10005,'CountryDriving','PeterHessler');  
  18. INSERTINTOvpdsample_booksVALUES(10006,'Lifewithoutlimits','NickVujicic');  
  19. commit; 

 

(以上兩個表模擬一個簡單的庫存情況,庫中有兩類物品,服裝、圖書。這里我們需要滿足兩個表中的ID的唯一性(可以通過sequence來實現)。)

  1. CREATETABLEvpdsample_users(  
  2. user_nameVARCHAR2(20),  
  3. user_privilegeNUMBER  
  4. );  
  5. --  
  6. INSERTINTOvpdsample_usersVALUES('Jack',1);  
  7. INSERTINTOvpdsample_usersVALUES('Rose',2);  
  8. COMMIT; 

 

(這個表存儲用戶的權限信息,其中的權限即后表vpdsample_privileges中的權限ID字段。)

(這個表存儲每個權限ID對應的權限信息,即對哪些對象(服裝或圖書)有權限。)

第二步,我們要創建一個context(實際上是【context名稱空間】)。可以簡單地把context理解為一個定義在內存中的容器,在此容器中我們可以定義若干個鍵值對,這些鍵值對可以在一定的范圍內被共享(比如同一個session中,或者同一個Oracle實例中)

首先,使用system用戶登錄,賦予創建者相應的權限:grant create any context to user1;然后通過:CREATE OR REPLACE CONTEXT VPD USING pkg_vpdsample ACCESSED GLOBALLY;這里我們創建了一個叫’vpd’的context,’using’后面的是一個PLSQL package的名字,出于安全性考慮,Oracle需要你在創建context時指定一個包名,表示后續對些context的修改只能通過此包中的存儲過程進行修改,不能通過dbms_session.set_context()直接進行修改。創建context時,package不存在并不會導致編譯錯誤。

最后’accessed globally’是一個可選項,如果未添加此項,表示此context使用范圍是某一session;如果指定了此項,則表示該context可以在整個數據庫實例范圍內共享。

欲刪除context同樣需要賦予相應的權限:

 

  1. grant drop any context to user1;  
  2. drop context VPD; 

 

第三步,建立一個package(即上面的pkg_vpdsample),包中的各個函數及存儲過程的作用會隨后逐一給出:

 

  1. CREATEORREPLACEPACKAGEpkg_vpdsample  
  2. IS  
  3. PROCEDUREenable_vpd;  
  4. PROCEDUREdisable_vpd;  
  5. PROCEDUREset_context(p_user_nameINVARCHAR2);  
  6. FUNCTIONgen_vpd_predicate(p_column_nameINVARCHAR2)RETURNVARCHAR2;  
  7. FUNCTIONapply_vpd_clothing(p1invarchar2,p2invarchar2)RETURNVARCHAR2;  
  8. FUNCTIONapply_vpd_books(p1invarchar2,p2invarchar2)RETURNVARCHAR2;  
  9. END;  
  10.  
  11. CREATEORREPLACEPACKAGEBODYpkg_vpdsampleIS  
  12. PROCEDUREenable_vpdIS  
  13. BEGIN  
  14. DBMS_SESSION.set_context(namespace=>'VPD',  
  15. attribute=>'ENABLE',  
  16. value=>'1');  
  17. END;  
  18.  
  19. /*======================*/  
  20. PROCEDUREdisable_vpdIS  
  21. BEGIN  
  22. DBMS_SESSION.set_context(namespace=>'VPD',  
  23. attribute=>'ENABLE',  
  24. value=>'0');  
  25. END;  
  26.  
  27. /*======================*/  
  28. PROCEDUREset_context(p_user_nameINVARCHAR2)IS  
  29. l_privilegeVARCHAR2(10);  
  30. BEGIN  
  31. SELECTuser_privilege  
  32. INTOl_privilege  
  33. FROMvpdsample_users  
  34. WHEREuser_name=p_user_name;  
  35. DBMS_SESSION.set_identifier(client_id=>l_privilege);  
  36. END;  
  37.  
  38. /*======================*/  
  39. FUNCTIONgen_vpd_predicate(p_column_nameINVARCHAR2)RETURNVARCHAR2IS  
  40. l_vpd_flagVARCHAR2(1);  
  41. l_privilegeVARCHAR2(10);  
  42. BEGIN  
  43. l_vpd_flag:=NVL(SYS_CONTEXT('VPD','ENABLE'),'0');  
  44. IFl_vpd_flag=0THEN 
  45. RETURNNULL;  
  46. ELSE  
  47. l_privilege:=SYS_CONTEXT('USERENV','CLIENT_IDENTIFIER');  
  48. IFl_privilegeISNULLTHEN  
  49. RETURN'1=2';  
  50. ELSE  
  51. RETURNp_column_name||'IN(SELECTobject_idFROMvpdsample_privilegesWHEREprivilege_id='||l_privilege||')';  
  52. ENDIF;  
  53. ENDIF;  
  54. END;  
  55.  
  56. /*======================*/  
  57. FUNCTIONapply_vpd_clothing(p1invarchar2,p2invarchar2)RETURNVARCHAR2IS  
  58. BEGIN  
  59. RETURNgen_vpd_predicate('clothing_id');  
  60. END;  
  61.  
  62. /*======================*/  
  63. FUNCTIONapply_vpd_books(p1invarchar2,p2invarchar2)RETURNVARCHAR2IS  
  64. BEGIN  
  65. RETURNgen_vpd_predicate('book_id');  
  66. END;  
  67. END; 

 

enable_vpd,disable_vpd:這兩個存儲過程用于設置context vpd下的一個自定義屬性’enable’,1表是啟用vpd,0表禁用vpd,由于我們在創建此context時指定了accessed globally,所以這些屬性是可以被跨session訪問的。這兩個存儲過程調用了dbms_session,因此需要被賦予相應的權限:grant execute on dbms_session to user1;

set_context:上面我們提到了context,并且在enable_vpd與disable_vpd中使用了dbms_session.set_context來設置自定義的屬性,其實除了這樣自定義的context外,Oracle還提供了預定義的context ’userenv’,該名稱空間下有若干預定義的屬性,比如’client_identifier’,設置此屬性我們不使用set_context,而是使用dbms_session.set_identifier()。

本例中此存儲過程根據傳入的用戶名,查找到該用戶的權限ID,并將此ID作為client_identifier保存到context ’userenv’中,以便后續使用。在實際應用中,此存儲過程應該是由外部的應用程序調用的,應用程序可以在登錄驗證完成后,調用此存儲過程寫入context。

gen_vpd_predicate:根據傳入的字段名稱生成一個語法正確的where子句。這里首先判斷了是否啟用了vpd,未設置vpd.enable屬性的也認為的已經啟用了。隨后判斷是否已設置userenv.client_identifier屬性,如果未設置,則返回一個始終為false的where子句以防止用戶查看數據。最后生成的語句中,根據取到的client_identifier(即用戶的權限ID)查找權限表vpdsample_privileges得到該用戶有權限的所有對象ID。

apply_vpd_clothing, apply_vpd_books:由名字可見,這兩個函數將被用于兩個不同的表,因為服裝表與圖書表所用于權限驗證的字段有著不同的名字。另外,大家可以看到這兩個將被用于vpd的函數都有兩個看似沒用的參數p1與p2,這是vpd接口的要求,第一個用于接收schema名,第二個用于接收table/view/synonym名稱,我們定義函數必須符合接口的要求。當然除了p1,p2外,你可以有自己額外的參數。

一切準備完畢,開始調用Oracle提供的dbms_rls包應用vpd策略,在調用之前,需要賦予用戶相應權限:grant execute on dbms_rls to user1;

其中policy_name可以自定義。

隨后我們啟用vpd:(需要說明的是,DBMS_RLS包本身有ENABLE_POLICY()方法用于啟用或禁用一個vpd策略,但它只能一次啟用/禁用一張表上的一個vpd策略,為了一次性啟用/禁用所有表上的vpd策略,可以采取類似上面的做法。)并設置context:隨后我們查詢vpdsample_clothing表,只返回了ID為10002的服裝信息;查詢vpdsample_books也類似,只返回了ID為10005的圖書信息。可以更換用戶,刪除vpd策略則使用:

 

  1. begin  
  2. dbms_rls.drop_policy(object_name=>'VPDSAMPLE_CLOTHING',policy_name=>'POL_CLOTHING');  
  3. dbms_rls.drop_policy(object_name=>'VPDSAMPLE_BOOKS',policy_name=>'pol_books');  
  4. end;  
  5.  
  6. begin  
  7. pkg_vpdsample.set_context('Rose');  
  8. end;  
  9.  
  10. begin  
  11. pkg_vpdsample.set_context('Jack');  
  12. end;  
  13.  
  14. begin  
  15. pkg_vpdsample.enable_vpd;  
  16. end; 

關于Oracle handbook系列之虛擬專用數據庫VPD的相關知識就介紹到這里了,希望本次的介紹能夠對您有所收獲!

【編輯推薦】

  1. Oracle 10g內存結構之系統全局區簡介
  2. Oracle數據庫中行轉列以及Join用法總結
  3. Oracle regexp_like的相關知識及使用示例
  4. Oracle 10g內存結構之共享池的相關知識及使用簡介
  5. Oracle 10g內存結構之排序區和Java池的相關知識簡介
責任編輯:趙鵬 來源: 博客園
相關推薦

2011-03-29 10:09:41

Oracle 10g虛擬數據庫

2011-08-24 13:34:34

Oracle

2011-08-11 16:55:34

Oracle數據庫AWR

2011-04-12 13:08:42

Oracle虛擬專用數據

2011-08-03 13:28:08

Oracle數據庫數據庫控制文件

2011-05-19 13:25:14

Oracle數據庫

2009-05-13 10:28:30

OracleDUAL數據庫

2011-08-16 13:17:29

2010-04-14 15:14:11

Oracle數據庫

2010-04-02 13:59:08

Oracle數據庫

2011-03-21 10:44:28

Oracle虛擬數據控制

2011-03-29 10:47:49

ORACLE數據庫

2011-08-11 17:56:00

Oracle數據庫decodesign

2011-08-19 16:20:14

Oracle數據庫查看工具LogMine

2011-08-29 16:41:14

OracleRMAN恢復數據文件的恢復

2011-08-18 15:49:21

Oracle厲行計劃

2011-05-17 15:02:15

ORACLE數據庫備份

2011-04-11 13:19:41

Oracle數據庫

2011-08-24 15:36:30

2021-09-06 10:24:12

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

欧美热在线视频精品999| 国产中文字幕在线观看| 国产一在线精品一区在线观看| 欧美一级高清片在线观看| 黄色a级片免费看| 无码精品人妻一区二区| 琪琪一区二区三区| 欧美国产中文字幕| 国产又粗又猛又爽又黄av | 日韩美女视频中文字幕| 人成免费在线视频| 卡一精品卡二卡三网站乱码| 欧美影视一区在线| 国产精品视频网站在线观看| 国产一级在线观看| 成人网页在线观看| 国产日韩欧美在线| 影音先锋亚洲天堂| 一区二区三区网站| 中文国产亚洲喷潮| 激情综合激情五月| 亚洲一区导航| 色94色欧美sute亚洲13| 国产精品自拍合集| 欧美精品电影| 91小视频在线| 97久久夜色精品国产九色| 国产一卡二卡三卡| 日韩视频三区| 欧美国产日韩一区二区三区| 91视频免费在观看| 欧美自拍一区| 日韩免费在线观看| 中文字幕资源在线观看| 午夜无码国产理论在线| 亚洲成人免费观看| 首页国产欧美久久| 欧美精品一区二区三区蜜臀| 色播五月综合网| 外国成人直播| 欧美性高潮在线| 男人的天堂狠狠干| 久久大胆人体| 一区二区三区美女| 香蕉视频免费版| 成a人片在线观看| 中文字幕一区不卡| 亚洲最大免费| 日本天堂在线观看| 中文字幕制服丝袜一区二区三区| 日本一区二区三区精品视频| 亚洲人妻一区二区| 97se亚洲国产综合自在线| 国产高清在线一区| 成人免费视频国产| proumb性欧美在线观看| 国产美女精品久久久| 亚洲国产欧美另类| 成人一区二区三区| 国产一区二区三区奇米久涩| 日本黄色一区二区三区| av午夜精品一区二区三区| 国产精品一区视频网站| 日本美女一级视频| 91麻豆福利精品推荐| 久久久99爱| 精品推荐蜜桃传媒| 国产精品网站在线| 一区二区三区四区久久| 18加网站在线| 亚洲国产精品久久不卡毛片| 美女日批免费视频| 成人欧美大片| 欧美日韩三级一区| 欧美又黄又嫩大片a级| 欧美专区一区| 国产免费不卡| 日韩码欧中文字| 免费看黄色a级片| 91超碰在线免费| 黄色成人av网| 99草草国产熟女视频在线| 国产麻豆久久| 欧美一区二区女人| 国产xxxxxxxxx| 狠狠色丁香婷婷综合影院| 色偷偷9999www| 久久久久久福利| 亚洲一区二区免费看| 国产精品91视频| 国产又大又粗又长| av在线不卡观看免费观看| 欧美日韩电影一区二区| 日本三级在线播放完整版| 亚洲小说欧美激情另类| 久久久久久久少妇| 久久久久毛片免费观看| 精品视频在线播放免| 国产91丝袜美女在线播放| 女人香蕉久久**毛片精品| 国产91精品久久久| a天堂视频在线| 久久久蜜桃精品| 国产1区2区3区中文字幕| 超级碰碰久久| 日韩精品一区二区三区三区免费| 亚洲精品成人无码| 国产综合视频| 国产精品入口夜色视频大尺度 | 麻豆视频在线看| 欧美喷水一区二区| 亚洲一区二区观看| 欧美国产激情| 国产欧美久久一区二区| 外国精品视频在线观看 | 一区二区视频国产| 国产精品偷拍| 精品视频一区二区不卡| 制服丝袜第一页在线观看| 欧美hentaied在线观看| 欧美性做爰毛片| www男人的天堂| 国产精品色婷婷| 国产男女在线观看| 一区二区中文字幕在线观看| 日韩在线资源网| 亚洲黄网在线观看| av成人动漫在线观看| 永久免费看av| 91精品亚洲一区在线观看| 亚洲天堂成人在线| 黄色免费av网站| 99久久精品久久久久久清纯| 日韩不卡视频一区二区| 国产成人亚洲一区二区三区| 亚洲香蕉成视频在线观看| 欧美亚韩一区二区三区| 国产不卡免费视频| www.18av.com| 视频精品一区| 久久国产精品影视| 国产模特av私拍大尺度| 亚洲视频免费在线观看| 日本在线播放一区二区| 日韩电影免费网址| 91国产福利在线| 欧美一级在线播放| aaa一区二区三区| 国产精品久久久久久久久免费樱桃| 97xxxxx| 噜噜噜天天躁狠狠躁夜夜精品 | 麻豆精品传媒视频| 台湾佬中文娱乐网欧美电影| 亚洲的天堂在线中文字幕| 久久精品视频6| 成人性视频免费网站| 男人添女荫道口图片| caoporn成人| 国内精品在线一区| 亚洲av片一区二区三区| 欧美午夜影院在线视频| 国产色视频一区二区三区qq号| 销魂美女一区二区三区视频在线| 鲁丝一区二区三区免费| 日韩高清中文字幕一区二区| 国产一区二区三区视频免费| 亚洲一区中文字幕在线| 一区免费观看视频| 亚洲av无码成人精品区| 99国产精品| 品久久久久久久久久96高清| 成人在线视频观看| 久久综合久久美利坚合众国| 午夜精品一二三区| 天天综合网 天天综合色| 香蕉网在线播放| 久草中文综合在线| 国产精品免费看久久久无码| 国产精品网址| 欧美专区在线观看| 男人网站在线观看| 欧美aaaaaaa| 日韩av网站电影| 最新中文字幕第一页| 亚洲日本一区二区三区| 午夜男人的天堂| 免费一级片91| 日本福利视频网站| 国产精品嫩草影院在线看| 成人妇女淫片aaaa视频| av成人福利| 自拍偷拍亚洲在线| 亚洲第一天堂影院| 欧洲人成人精品| 欧美色图亚洲天堂| 国产丝袜在线精品| 久久久久久久久久久影视| 亚洲资源av| 亚洲免费视频播放| 亚洲美女久久| 成人妇女淫片aaaa视频| 都市激情综合| 精品中文字幕在线2019| 黄色片免费在线| 日韩欧美精品在线视频| 日本中文字幕在线观看视频| 一区二区三区欧美日| 精品成人无码一区二区三区| 国产成人av电影| 国产精品久久久毛片| 99热在线精品观看| 一道本在线观看视频| 国产伦精品一区二区三区视频 | 欧美高清在线视频| 一级黄色免费视频| 激情欧美一区二区| 成人av电影在线播放| 成人免费网站入口| 日韩在线理论| 免费国产一区二区| silk一区二区三区精品视频| 国产一区二中文字幕在线看 | 国产精品美女在线观看| 岛国av在线播放| 久热精品视频在线观看| 成人午夜影视| 亚洲精品小视频| 日本韩国在线观看| 精品美女在线观看| 精品国产乱码久久久久久蜜臀网站| 在线观看欧美日本| 国产日产精品一区二区三区| 亚洲无人区一区| 草视频在线观看| 成人免费在线观看入口| 国产亚洲精品精品精品| 国产欧美日韩综合精品一区二区| 欧美无人区码suv| 成人手机在线视频| 极品白嫩的小少妇| www.视频一区| 你懂的在线观看网站| 成人不卡免费av| 久久久久久久人妻无码中文字幕爆| 国产精品亚洲一区二区三区在线 | 97视频一区| 97久久精品午夜一区二区| 超碰在线公开97| 欧美一级三级| 明星裸体视频一区二区| 一本久久青青| 欧美在线播放一区二区| 国产剧情一区| 亚洲成色www久久网站| 日韩精品水蜜桃| 亚洲第一精品区| 午夜精品亚洲| 欧美久久久久久久久久久久久| 影音先锋亚洲一区| 欧美三级一级片| 丝袜亚洲精品中文字幕一区| 狠狠躁狠狠躁视频专区| 久久精品国产亚洲一区二区三区 | 成人性色生活片| 国模私拍在线观看| 国产无人区一区二区三区| 日韩视频在线观看免费视频| 综合欧美一区二区三区| 久久久久99精品成人片试看| 亚洲一区二区三区四区五区黄| 国产精品7777| 91久久香蕉国产日韩欧美9色| 亚洲视频在线观看免费视频| 欧美一卡二卡三卡| 日韩在线视频第一页| 亚洲欧美中文日韩在线| 五月婷婷在线视频| 欧美激情精品久久久久久大尺度| 欧美伦理91| 国产欧美亚洲精品| 波多野结衣一区二区三区免费视频| 精品在线视频一区二区三区| 日韩av久操| 免费特级黄色片| 日韩国产在线一| 精品国产午夜福利在线观看| 不卡的看片网站| av免费播放网站| 亚洲国产综合在线| 国语对白做受69按摩| 日韩欧美久久一区| 高清日韩av电影| 欧美黄色片视频| 伦一区二区三区中文字幕v亚洲| 99久久一区三区四区免费| 亚洲女娇小黑人粗硬| 亚洲欧洲精品在线| 亚洲在线国产日韩欧美| 免费在线观看污网站| 97se亚洲国产综合自在线| 午夜成人亚洲理伦片在线观看| 午夜成人免费电影| 亚洲一区二区三区高清视频| 日韩成人激情视频| av大全在线| 国产91在线播放九色快色| 精品视频91| 色一情一区二区三区四区| 黄色亚洲免费| 人人爽人人爽av| 久久免费美女视频| 国产真实的和子乱拍在线观看| 欧美日韩午夜精品| 精品无吗乱吗av国产爱色| 久久久久久有精品国产| 97久久精品一区二区三区的观看方式| 久久精品美女| 黄色日韩精品| 日本一本在线视频| 国产精品久久久久精k8 | 99久久精品免费视频| 亚洲一区二区三区三| 国产精品特级毛片一区二区三区| 亚洲天堂日韩电影| 午夜伦理福利在线| 国产一区二区三区无遮挡| 亚洲精品在线观看91| 五月天亚洲视频| 国产日韩欧美制服另类| 国产无遮挡呻吟娇喘视频| 精品精品欲导航| 日本在线视频网址| 亚洲综合一区二区不卡| 9999国产精品| 99sesese| 国产精品污www在线观看| 9i精品福利一区二区三区| 日韩av综合网站| sqte在线播放| 风间由美一区二区三区| 综合激情视频| 秋霞午夜鲁丝一区二区 | 你懂的国产视频| 亚洲成人在线网| 俺来也官网欧美久久精品| av一区和二区| 一区在线免费| 岛国精品一区二区三区| 亚洲一二三专区| 神马一区二区三区| 91国在线精品国内播放| 首页亚洲中字| 激情视频综合网| 欧美国产成人在线| 国产又爽又黄免费软件| 久久在线精品视频| 日韩在线精品强乱中文字幕| www插插插无码免费视频网站| 国产ts人妖一区二区| 久久精品国产亚洲AV无码麻豆| 亚洲福利在线视频| 午夜激情在线播放| 日韩三级电影| 韩国成人精品a∨在线观看| 亚洲xxxx3d动漫| 日韩精品一区二区三区视频播放 | 黄页网站一区| 国产xxxxxxxxx| 色综合久久久久综合体桃花网| 国产二区在线播放| 成人两性免费视频| 亚洲视频观看| 中字幕一区二区三区乱码| 欧美精品视频www在线观看 | 亚洲免费在线视频观看| 亚洲精品少妇网址| 亚洲91在线| 99在线观看视频免费| 91网站最新网址| 国产又粗又猛又色又| 欧美激情高清视频| 国产麻豆精品久久| 亚洲丝袜在线观看| 欧美视频在线视频| 日韩在线免费电影| 国产欧美日韩伦理| 天堂av在线一区| 日本天堂中文字幕| 亚洲美女喷白浆| 宅男噜噜噜66国产精品免费| 成人免费观看cn| 亚洲国产成人私人影院tom| 国产黄色一区二区| 人九九综合九九宗合| 真实国产乱子伦精品一区二区三区| 国产chinese中国hdxxxx| 欧美系列日韩一区| 女囚岛在线观看| 亚洲一区二区三区涩| 99久久婷婷国产综合精品|