精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

一区在线免费| 精品国产欧美日韩一区二区三区| 成人永久aaa| 欧美亚洲第一区| 欧美日韩中文字幕视频| 精品国产亚洲一区二区三区大结局 | 亚洲视频资源在线| 国模精品一区二区三区| 伊人22222| 亚洲毛片网站| 久久影院免费观看| 中文字幕一区二区久久人妻网站 | 豆国产97在线| 精产国品一区二区| 波多野结衣爱爱| 99久久久久| 亚洲国产成人精品一区二区 | 韩国19禁主播vip福利视频| 国产白嫩美女无套久久| 久久久久伊人| 福利视频导航一区| 国产香蕉一区二区三区| 精品欧美不卡一区二区在线观看| 韩国女主播成人在线观看| 国产91精品青草社区| 欧美成人精品欧美一级| 日韩伦理视频| 日韩久久免费电影| 日本人dh亚洲人ⅹxx| 国产精品毛片久久久久久久久久99999999 | 国产精品一区二区欧美黑人喷潮水 | 99porn视频在线| 中文天堂在线播放| 亚洲女优在线| 欧美激情日韩图片| 午夜国产小视频| 精品国产99| 日韩精品中文字幕久久臀| 野花视频免费在线观看| 亚洲免费一区| 欧美日本一道本| 久久午夜夜伦鲁鲁一区二区| 成年人在线网站| 亚洲一二三四区不卡| 黄色一级片av| 91麻豆免费在线视频| 中文字幕一区二区三区不卡| 亚洲 国产 欧美一区| 裸体xxxx视频在线| 久久青草欧美一区二区三区| 九九九久久久| 先锋av资源站| 2020国产精品久久精品美国| 国产精品灌醉下药二区| 69堂成人精品视频免费| 亚洲专区第一页| 日本午夜一区二区| 国产成人在线亚洲欧美| 亚洲影院在线播放| 亚洲免费一区二区| 日本高清+成人网在线观看| 国产精品suv一区二区三区| 在线视频观看日韩| 91国产高清在线| 天堂网av手机版| 麻豆91精品| 国产精品久久久久久久9999 | 黑人精品视频| 亚洲二区视频在线| 女人天堂av手机在线| 在线中文字幕播放| 欧美四级电影网| 国产传媒免费观看| 亚洲国产aⅴ精品一区二区| 日韩欧美国产三级| 视频免费在线观看| 九九热爱视频精品视频| 中文字幕av一区中文字幕天堂| 五月天精品在线| 91成人国产| 欧美国产日韩一区二区三区| 国产成人愉拍精品久久 | 亚洲 中文字幕 日韩 无码| av久久网站| 欧美一二区视频| 日本黄色动态图| 国内精品久久久久久久影视简单 | 欧美高清xxx| 日韩欧美高清在线| 波多野结衣 在线| 天堂美国久久| 国内精品中文字幕| 中文字幕天堂在线| 国产成人免费视频精品含羞草妖精 | 国产免费视频传媒| 国产一区二区三区免费观看在线| 亚洲第一视频网站| 亚洲av毛片基地| 很黄很黄激情成人| 国产精品第100页| 国产aⅴ爽av久久久久成人| 26uuu欧美| 影音先锋成人资源网站| 中文日产幕无线码一区二区| 69堂精品视频| 国产精品九九九九九| 午夜片欧美伦| 人人爽久久涩噜噜噜网站| 国产美女裸体无遮挡免费视频| 波多野结衣91| 懂色av一区二区三区四区五区| 欧美日韩国产观看视频| 91精品国产综合久久久久久漫画| 日本免费福利视频| 午夜视频一区| 成人亲热视频网站| 经典三级在线| 五月激情综合婷婷| 丰满人妻一区二区三区大胸| 欧美3p在线观看| 日本精品久久久| 亚洲美女福利视频| 中文字幕在线观看不卡| 国模吧无码一区二区三区| 日韩一区二区三区高清在线观看| 正在播放亚洲1区| 91video| 成av人片一区二区| 激情视频小说图片| 亚洲成人a级片| 视频在线一区二区| 伊人中文字幕在线观看 | 欧美偷拍一区二区三区| 精品成人一区| 99理论电影网| 色老头在线观看| 91麻豆精品国产自产在线| 久久久久亚洲av无码a片| 米奇777在线欧美播放| 国产综合欧美在线看| 爱福利在线视频| 精品国产乱码久久久久久夜甘婷婷| 精品国产视频在线观看| 蜜桃免费网站一区二区三区| 午夜精品一区二区在线观看 | 91精品国产一区二区人妖| 国产精品综合激情| 男女男精品视频| 亚洲第一导航| 成人国产网站| 日韩中文在线中文网三级| 国产精品国产精品国产| 国产日韩欧美高清| 人妻无码视频一区二区三区| 九九免费精品视频在线观看| 国产成人亚洲精品| 丁香婷婷在线| 69av一区二区三区| 加勒比婷婷色综合久久| 国产精品99久久久久| www.一区二区.com| 精品国产影院| 日本久久久久久久| 爱爱爱免费视频在线观看| 欧美手机在线视频| 色老板免费视频| 国产成人一级电影| 国产美女网站在线观看| 亚洲精品进入| 91精品国产综合久久香蕉922| 日韩精品黄色| 精品伦理精品一区| 五月婷婷亚洲综合| 国产精品免费观看视频| 亚洲黄色片免费| 精品91在线| 欧洲精品在线一区| 国产精品1区在线| 国内精品久久久久久中文字幕| 亚洲色图 校园春色| 欧美综合亚洲图片综合区| 免费在线观看黄色小视频| 国产精品一区三区| www.浪潮av.com| 日韩欧美视频在线播放| 91视频婷婷| 日本成人三级电影| 久热国产精品视频| 日本免费一区二区三区最新| 欧美日韩国产精品成人| 久久黄色免费视频| 久久精品一级爱片| 欧美人与性动交α欧美精品| 午夜一级久久| 久久免费视频2| 欧美日韩一区二区三区四区不卡 | 香蕉精品久久| 亚洲一区二区在线| 亚洲欧美韩国| 色综合91久久精品中文字幕| 欧美美女色图| 日韩视频永久免费| 中文字幕在线观看国产| 亚洲444eee在线观看| 亚洲精品一区二区三区在线播放| zzijzzij亚洲日本少妇熟睡| 视频免费1区二区三区| 亚洲综合欧美| 青青在线视频免费观看| 精品国产乱码久久久久久蜜坠欲下 | 男人天堂网在线观看| 欧美一区中文字幕| 国产精品第6页| 午夜久久久久久久久久一区二区| 最新日韩免费视频| 久久尤物电影视频在线观看| 女教师高潮黄又色视频| 蜜臀va亚洲va欧美va天堂| 国产免费观看高清视频| 牛夜精品久久久久久久99黑人| 日韩视频在线播放| 中文字幕中文字幕精品| 国产精品区一区| 久久gogo国模啪啪裸体| 国产精品久久久久久久久久久久| а√天堂资源官网在线资源| 欧美成人精品一区二区三区| 尤物在线视频| 亚洲日本成人女熟在线观看| 手机看片一区二区三区| 日韩免费在线观看| 国产视频一二三四区| 欧美体内she精视频| 日韩不卡高清视频| 一本大道综合伊人精品热热 | 欧美成人在线免费观看| 豆花视频一区二区| 97超碰人人模人人爽人人看| 日韩电影精品| 国产在线观看一区二区三区 | 精品日韩成人av| 国产人妻精品一区二区三| 欧美日韩国产小视频在线观看| 黄色网址中文字幕| 欧美在线视频全部完| 99re热视频| 欧美日韩不卡一区二区| 夜夜躁很很躁日日躁麻豆| 欧美色视频在线观看| 在线观看国产一区二区三区| 欧美日韩中文另类| 中文字幕制服诱惑| 欧美日韩第一区日日骚| 6—12呦国产精品| 91精品国产综合久久久久久久| 国产精品久久久久久久免费看| 欧美电影在线免费观看| 国产精品无码久久av| 日韩一区二区影院| 亚洲精品人妻无码| 亚洲精品电影网| 欧美视频免费一区二区三区| 一区二区三区四区精品| 麻豆传媒在线免费看| 九九热精品视频国产| 9999热视频在线观看| 欧美亚洲国产日本| 日韩欧美一区二区三区在线观看| 国产精品久久久久av| www.久久久久爱免| 成人综合色站| 岳的好大精品一区二区三区| 日本a级片久久久| 先锋资源久久| 免费一级淫片aaa片毛片a级| 校园激情久久| 亚洲免费黄色录像| 成人在线视频一区二区| 精品成人无码一区二区三区| 亚洲欧美一区二区三区极速播放| 日韩aaaaaa| 欧美亚洲愉拍一区二区| 国产黄色片av| 亚洲天堂精品在线| 超碰超碰在线| 欧美一级大胆视频| 亚洲日韩中文字幕一区| 久久久久久草| 天天做天天爱天天综合网2021| 日韩精品在线中文字幕| 日日夜夜免费精品视频| 91av免费观看| 国产色爱av资源综合区| 欧美精品久久久久性色| 日本韩国欧美国产| www.日日夜夜| 中文字幕亚洲无线码在线一区| 黄页网站在线| 国产日产欧美精品| 日韩影视在线观看| 乱子伦一区二区| 久久精品动漫| 国产伦精品一区二区三区精品| 欧美国产国产综合| 日韩欧美亚洲视频| 欧美精品 日韩| 免费观看成年在线视频网站| 欧美国产日韩二区| 欧美亚洲人成在线| 欧美日韩国产免费一区二区三区 | 国产做受高潮69| 日韩成人综合网| 麻豆久久久av免费| 最新日韩欧美| 久久久国产精品久久久| 国产精品激情偷乱一区二区∴| 国产精品7777777| 日韩欧美国产wwwww| 国产三区视频在线观看| 国产精品久久久久999| 色天下一区二区三区| www成人免费| 国内精品在线播放| 国产探花视频在线播放| 色一情一乱一乱一91av| 天堂在线视频免费| 欧美激情在线观看视频| 成人短视频软件网站大全app| 神马影院我不卡午夜| 久久久久国产精品一区三寸| 中文字幕无码人妻少妇免费| 亚洲综合视频在线观看| 国产日韩一级片| 久久天天躁夜夜躁狠狠躁2022| 亚洲四虎影院| 视频二区一区| 蜜桃视频一区二区| 成年人视频软件| 欧美久久久久久蜜桃| 欧美午夜电影一区二区三区| 国产日韩欧美电影在线观看| 日本一区二区在线看| 亚洲国产精品三区| av电影一区二区| 日本五十路女优| 亚洲国产成人在线播放| 蜜桃视频m3u8在线观看| 激情视频在线观看一区二区三区| 亚洲激情视频| 五月开心播播网| 欧美日韩一区免费| 国产美女视频一区二区三区| 国产精品视频午夜| 欧美国产美女| 91丨porny丨九色| 亚洲福利视频导航| 三级在线观看| 国产精品免费小视频| 91亚洲国产高清| 麻豆精品国产传媒| 五月天国产精品| 国产女人在线观看| 国产在线视频一区| 欧美视频日韩| 免费看黄色aaaaaa 片| 色就色 综合激情| 日本福利在线| 粉嫩精品一区二区三区在线观看| 99pao成人国产永久免费视频| 欧洲一级黄色片| 精品视频一区二区三区免费| 黄色成年人视频在线观看| 成人蜜桃视频| 久久精品电影| 破处女黄色一级片| 日韩激情av在线免费观看| 成人a在线观看高清电影| 精品久久免费观看| 成人国产精品免费观看动漫| 久久久久久久久久成人| 久久精品影视伊人网| 精品午夜电影| 亚洲欧洲日本精品| 亚洲国产欧美在线人成| 每日更新在线观看av| 亚洲a一级视频| 性色一区二区三区| 欧美一区免费观看| 日韩av影视综合网| 国精品产品一区| 日韩欧美国产综合在线| 欧美高清一级片在线观看| 亚洲精品国产av| 国产精品福利无圣光在线一区| 欧美淫片网站| 久久久久久久毛片| 亚洲白虎美女被爆操| 欧美美女被草| 97国产在线播放| 亚洲激情图片一区|