¡¡¡¡VPD µÄ¹¤×÷·½·¨ÊÇ£¬Í¨¹ý͸Ã÷µØ¸ü¸Ä¶ÔÊý¾ÝµÄÇëÇ󣬻ùÓÚһϵÁж¨ÒåµÄ±ê×¼ÏòÓû§Ìṩ±íµÄ¾Ö²¿ÊÓͼ¡£ÔÚÔËÐÐʱ£¬ËùÓвéѯ¶¼¸½¼ÓÁËν´Ê£¬ÒÔ±ãɸѡ³ö×¼ÐíÓû§¿´µ½µÄÐС£ÀýÈ磬Èç¹ûÖ»ÔÊÐíÓû§²é¿´ÕÊ»§¹ÜÀíÔ± SCOTT µÄÕÊ»§£¬Ôò VPD ÉèÖÃ×Ô¶¯µØ½«²éѯ£º
¡¡¡¡select * from accounts;
¡¡¡¡ÖØдΪ£º
¡¡¡¡select * from accounts;
¡¡¡¡where am_name = 'SCOTT';
¡¡¡¡DBA ÔÚ±í ACCOUNTS ÉÏÉèÖÃÁËÒ»Ïȫ²ßÂÔ¡£¸Ã²ßÂÔ¾ßÓÐÒ»¸öÏà¹Øº¯Êý£¬³ÆΪpolicy function£¬Ëü·µ»ØÒ»¸öÓÃ×÷ν´ÊµÄ×Ö·û´® where am_name = 'SCOTT'¡£Èç¹ûÄú²»ÊìϤ¸ÃÌØÐÔµÄÈ«²¿¹¦ÄÜ£¬ÎÒ½¨ÒéÄúÔĶÁ Oracle ÔÓÖ¾µÄÎÄÕ¡°ÀûÓà VPD ±£³ÖÐÅÏ¢µÄ˽ÃÜÐÔ¡±¡£
¡¡¡¡²ßÂÔÀàÐÍ
¡¡¡¡Éú³Éν´ÊËùÐèµÄÖظ´·ÖÎöÊÇÒ»ÖÖÔÚijЩÇé¿öÏ¿ÉÒÔ½øÐÐÐÞÕûµÄ¿ªÏú¡£ÀýÈ磬Ôڴ󲿷Öʵ¼ÊÇé¿öÖУ¬Î½´Ê²¢²»Ïó am_name = 'SCOTT' ÄÇÑùÊǾ²Ì¬µÄ£»Ëü»ùÓÚÓû§µÄÉí·Ý¡¢Óû§µÄȨÏÞ¼¶±ð¡¢Óû§ÏòÄĸöÕÊ»§¹ÜÀíÔ±½øÐб¨¸æµÈÇé¿ö,¿ÉÄܸü¾ßÓж¯Ì¬ÐÔ¡£ÓɲßÂÔº¯Êý´´½¨²¢·µ»ØµÄ×Ö·û´®¿ÉÄÜ»á¾ßÓкÜÇ¿µÄ¶¯Ì¬ÐÔ£¬¶øΪÁ˱£Ö¤Æä½á¹û£¬Oracle ±ØÐëÿ´ÎÖØÐÂÖ´ÐвßÂÔº¯Êý£¬¼ÈÀË·Ñ×ÊÔ´ÓÖ½µµÍÐÔÄÜ¡£ÔÚÕâÖÖÀàÐ͵IJßÂÔÖУ¬Î½´Êÿ´ÎÖ´ÐÐʱ¿ÉÄÜ»áÓкܴóµÄ²î±ð£¬¸Ã²ßÂÔ³ÆΪ¡°¶¯Ì¬¡±²ßÂÔ£¬ÔÚ Oracle9i Êý¾Ý¿âÒÔ¼°ÒÔÇ°µÄ°æ±¾ÖÐÒѾÌṩÁËÕâÖÖ²ßÂÔ¡£
¡¡¡¡³ýÁ˱£Áô¶¯Ì¬²ßÂÔÖ®Í⣬Oracle Êý¾Ý¿â 10g »¹»ùÓÚν´ÊµÄ¹¹ÔìÍƳöÁ˼¸ÖÖÐÂÀàÐ͵IJßÂÔ£¬ÎªÌá¸ßÐÔÄÜÌṩÁ˸üºÃµÄ¿ØÖÆ£ºcontext_sensitive¡¢shared_context_sensitive¡¢shared_static ºÍ static¡£ÏÖÔÚ£¬ÈÃÎÒÃÇÀ´Á˽âÿÖÖ²ßÂÔÀàÐ͵ÄÒâÒåÒÔ¼°ÈçºÎÔÚÊʵ±µÄ³¡ºÏÖÐʹÓÃËüÃÇ¡£
¡¡¡¡¶¯Ì¬²ßÂÔ
¡¡¡¡Îª±£³ÖÏòºó¼æÈÝÐÔ£¬10g ÖеÄĬÈϲßÂÔÀàÐÍΪ¡°dynamic¡± -- ÕýÈç Oracle9i ÖÐÒ»Ñù¡£ÔÚÕâÖÖÇé¿öÏ£¬¶ÔÓÚÿÐÐÒÔ¼°Ã¿Î»Óû§£¬ÔÚÿ´Î·ÃÎʱíʱ¶¼¶Ô²ßÂÔº¯Êý½øÐÐÖØÐÂÇóÖµ¡£ÈÃÎÒÃÇÀ´Ïêϸ·ÖÎö²ßÂÔν´Ê£º
¡¡¡¡where am_name = 'SCOTT'
¡¡¡¡ºöÂÔµô where ×Ӿ䣬ν´Ê¾Í¾ßÓÐÁ½¸ö²»Í¬µÄ²¿·Ö£ºÔÚµÈʽ²Ù×÷·û֮ǰµÄ²¿·Ö (am_name) ºÍµÈʽ²Ù×÷·ûÖ®ºóµÄ²¿·Ö ('SCOTT')¡£ÔÚ´ó¶àÊýÇé¿öÏ£¬ºóÃæµÄ²¿·Ö¸üÏóÊDZäÁ¿£¬ÒòΪËüÊÇÓÉÓû§µÄÊý¾ÝÌṩµÄ£¨Èç¹ûÓû§ÊÇ SCOTT£¬ÔòÆäֵΪ 'SCOTT'£©¡£ÔڵȺÅÇ°ÃæµÄ²¿·ÖÊǾ²Ì¬µÄ¡£Òò´Ë£¬¼´Ê¹º¯Êý²»±ØΪÉú³ÉÊʵ±µÄν´Ê¶ø¶ÔÿÐÐÇó³ö²ßÂÔº¯ÊýµÄÖµ£¬ÓÉÓÚÁ˽âÇ°Ã沿·ÖµÄ¾²Ì¬ÐÔÒÔ¼°ºóÃ沿·ÖµÄ¶¯Ì¬ÐÔ£¬Ò²¿ÉÒÔÌá¸ßÐÔÄÜ¡£ÔÚ 10g ÖУ¬¿ÉÒÔÔÚ dbms_rls.add_policy µ÷ÓÃÖÐʹÓà "context_sensitive" ÀàÐ͵IJßÂÔ×÷Ϊ²ÎÊýÀ´ÊµÏÖÕâÖÖ·½·¨£º
¡¡¡¡policy_type => dbms_rls.context_sensitive
¡¡¡¡ÔÚÁíÒ»¸öʾÀýÖУ¬ÎÒÃÇÓÐÒ»¸ö³ÆΪ ACCOUNTS µÄ±í£¬ËüÓµÓм¸ÁУ¬ÆäÖÐÒ»ÁÐÊÇ BALANCE£¬±íʾÕÊ»§Óà¶î¡£¼ÙÉèÔÊÐíij¸öÓû§²é¿´µÍÓÚijÌض¨Óà¶îµÄÕÊ»§£¬¶ø¸ÃÓà¶îÓÉÓ¦ÓóÌÐòÉÏÏÂÎÄËù¾ö¶¨¡£ÎÒÃDz¢²»ÔÚ²ßÂÔº¯ÊýÖн«´ËÓà¶îÖµ¹Ì¶¨£¬¶øÊÇ3ÊǸù¾ÝÓ¦ÓóÌÐòÉÏÏÂÎÄÈ·¶¨£¬È磺
ÒýÓÃ:¡¡¡¡create or replace vpd_pol_func
¡¡¡¡(
¡¡¡¡p_schema in varchar2,
¡¡¡¡p_table in varchar2
¡¡¡¡)
¡¡¡¡return varchar2
¡¡¡¡is
¡¡¡¡begin
¡¡¡¡return 'balance < sys_context(''vpdctx'', ''maxbal'')';
¡¡¡¡end;
¡¡¡¡Ó¦ÓóÌÐòÉÏÏÂÎÄ VPDCTX µÄÊôÐÔ MAXBAL ¿ÉÒÔÔڻỰµÄÇ°ÆÚÉ趨£¬¶øº¯ÊýÔÚÔËÐÐʱ¿ÉÒÔÈÝÒ׵ػñµÃ¸ÃÊýÖµ¡£
¡¡¡¡Çë×ÐϸעÒâ¸ÃʾÀý¡£Î½´ÊÓÐÁ½²¿·Ö£ºÐ¡ÓÚºÅ֮ǰµÄ²¿·ÖºÍÖ®ºóµÄ²¿·Ö¡£Ö®Ç°µÄ²¿·ÖÊÇ¡°balance¡±Ò»´Ê£¬ËüÊÇÎÄ×Ö·û¡£ºóÃæµÄ²¿·Ö´ÓijÖ̶ֳȶøÑÔÊǾ²Ì¬µÄ£¬ÒòΪӦÓóÌÐòÉÏÏÂÎıäÁ¿Ôڸıä֮ǰһֱÊdz£Á¿¡£Èç¹ûÓ¦ÓóÌÐòÉÏÏÂÎÄÊôÐÔ²»±ä£¬ÔòÕû¸öν´ÊÊdz£Á¿£¬Òò´Ë²»ÐèÒªÖØÐÂÖ´Ðк¯Êý¡£Èç¹û²ßÂÔÀàÐͶ¨ÒåΪ¶ÔÉÏÏÂÎÄÃô¸Ð£¬Ôò Oracle Êý¾Ý¿â 10g ¿ÉÒÔʶ±ð´ËÇé¿öÒÔÓÃÓÚÓÅ»¯¡£Èç¹ûÔڻỰÆÚ¼äûÓз¢Éú»á»°ÉÏÏÂÎĵı仯£¬Ôò²»ÖØÐÂÖ´Ðиú¯Êý£¬´Ó¶øÏÔÖøÌá¸ßÁËÐÔÄÜ¡£
¡¡¡¡¾²Ì¬²ßÂÔ
¡¡¡¡ÓÐʱҵÎñ²Ù×÷¿ÉÒÔÈ·±£Î½´Ê¸ü¼Ó¾²Ì¬¡£ÀýÈ磬ÔÚÉÏÏÂÎÄÃô¸ÐµÄ²ßÂÔÀàÐÍʾÀýÖУ¬ÎÒÃǽ«Óû§Ëù¼ûµÄ×î´óÓà¶î¶¨ÒåΪһ¸ö±äÁ¿¡£µ± web Ó¦ÓóÌÐòÖÐµÄ Oracle userid ÓÉÐí¶à web Óû§¹²Ïí£¬²¢ÇÒÓ¦ÓóÌÐò»ùÓÚÕâЩÓû§µÄȨÏÞÀ´ÉèÖøñäÁ¿£¨Ó¦ÓóÌÐòÉÏÏÂÎÄ£©Ê±£¬ÕâÖÖ·½·¨ºÜÓÐÓá£Òò´Ë£¬web Óû§ TAO ºÍ KARTHIK ¶¼ÊÇÒÔÓû§ APPUSER Á¬½Óµ½Êý¾Ý¿âµÄ£¬¶þÕß¿ÉÒÔÔÚÆä»á»°ÖÐÓµÓÐÁ½¸ö²»Í¬µÄÓ¦ÓóÌÐòÉÏÏÂÎĵÄÖµ¡£´Ëʱ MAXBAL µÄÖµ²¢²»ÒÀÀµÓÚ Oracle userid£¬¶øÊÇÒÀÀµ TAO ºÍ KARTHIK ¸÷×ԵĻỰ¡£
¡¡¡¡ÔÚ¾²Ì¬²ßÂÔµÄÇé¿öÏ£¬Î½´Ê¸ü¾ßÓпÉÔ¤²âÐÔ£¬Æä˵Ã÷ÈçÏ¡£
¡¡¡¡LORA ºÍ MICHELLE ·Ö±ðÊÇ Acme Bearings ºÍ Goldtone Bearings µÄÕÊ»§¹ÜÀíÔ±¡£µ±ËûÃÇÁ¬½ÓÊý¾Ý¿âʱ£¬ËûÃÇʹÓÃ×Ô¼ºµÄ id£¬²¢ÇÒÖ»Ó¦¸Ã¿´µ½ÊôÓÚËûÃǵÄÄÇЩÐС£ÔÚ Lora ·½Ã棬ν´Ê±ä³É where CUST_NAME = 'ACME'£»¶ø¶ÔÓÚ Michelle£¬ÔòÊÇ where CUST_NAME = 'GOLDTONE'¡£ÔÚÕâÀν´ÊÒÀÀµÓÚËûÃÇµÄ userid£¬Òò´ËËûÃÇËù´´½¨µÄÈκλỰÔÚÓ¦ÓóÌÐòÉÏÏÂÎÄÖÐʼÖÕ¾ßÓÐÏàͬµÄÖµ¡£
¡¡¡¡10g ¿ÉÒÔÀûÓÃÕâÖÖÇé¿ö£¬ÔÚ SGA ÖжÔν´Ê½øÐиßËÙ»º´æ£¬²¢ÔڻỰÖÐÖØÓøÃν´Ê£¬¶ø²»±ØÖØÐÂÖ´ÐвßÂÔº¯Êý¡£²ßÂÔº¯ÊýÀàËÆÓÚÒÔÏÂÐÎʽ£º
¡¡
ÒýÓÃ:¡¡¡¡create or replace vpd_pol_func
¡¡¡¡(
¡¡¡¡p_schema in varchar2,
¡¡¡¡p_table in varchar2
¡¡¡¡)
¡¡¡¡return varchar2
¡¡¡¡is
¡¡¡¡begin
¡¡¡¡return 'cust_name = sys_context(''vpdctx'', ''cust_name'')';
¡¡¡¡end;
¡¡¡¡¶ø²ßÂÔ¶¨ÒåΪ£º
¡¡¡¡policy_type => dbms_rls.static
¡¡¡¡ÕâÖÖ·½·¨È·±£²ßÂÔº¯ÊýÖ»Ö´ÐÐÒ»´Î¡£¼´Ê¹Ó¦ÓóÌÐòÉÏÏÂÎÄÔڻỰÖиı䣬Ҳ´Ó²»ÖØÐÂÖ´Ðиú¯Êý£¬Ê¹µÃ´Ë¹ý³ÌµÄËٶȷdz£¿ì¡£
¡¡¡¡½¨Ò齫¾²Ì¬²ßÂÔÓÃÓÚÔÚ¼¸¸öÓû§ÖÐÍйÜÓ¦ÓóÌÐòµÄÇé¿ö¡£ÔÚÕâÖÖÇé¿öÏ£¬µ¥¸öÊý¾Ý¿âÓµÓм¸¸öÓû§µÄÊý¾Ý¡£µ±Ã¿¸öÓû§µÇ¼ʱ£¬µÇ¼ºó´¥·¢Æ÷¿ÉÒÔÉèÖÃÓÃÓÚ²ßÂÔº¯ÊýµÄÓ¦ÓóÌÐòÉÏÏÂÎĵÄÖµ£¬ÒÔ±ã¿ìËÙÉú³Éν´Ê¡£
¡¡¡¡µ«ÊÇ£¬½«²ßÂÔ¶¨ÒåΪ¾²Ì¬Ò²ÊÇÒ»°ÑË«Èн£¡£ÔÚÒÔÉϵÄʾÀýÖУ¬ÎÒÃǼÙÉèÓ¦ÓóÌÐòÉÏÏÂÎÄÊôÐÔ VPDCTX.CUST_NAME µÄÖµÔڻỰÖв»¸Ä±ä¡£Èç¹ûÕâÖÖ¼ÙÉè²»ÕýÈ·£¬½«»áÔõÑùÄØ£¿Èç¹û¸ÃÖµ¸Ä±ä£¬²ßÂÔº¯Êý½«²»»áÖ´ÐУ¬Òò´ËÔÚν´ÊÖн«²»»áʹÓÃÐÂÖµ£¬¶ø·µ»Ø´íÎóµÄ½á¹û£¡Òò´Ë£¬ÔÚ½«²ßÂÔ¶¨ÒåΪ¾²Ì¬Ê±Òª·Ç³£Ð¡ÐÄ£»Äú±ØÐë¾ø¶ÔȷПÃÖµ²»»á¸Ä±ä¡£Èç¹ûÄú²»ÄÜ×÷ÕâÖÖ¼ÙÉ裬Ôò×îºÃ½«²ßÂÔ¶¨ÒåΪ¶ÔÉÏÏÂÎÄÃô¸Ð¡£