12c OCP題庫解析060-2 對配置了VPD策略的表進行線上重定義

Hoegh發表於2016-05-11

Examine the following commands for redefining a table with Virtual Private Database (VPD) policies: 

 BEGIN

  DBMS_RLS.ADD_POLICY(

    object_schema   =>  'hr',

    object_name     =>  'employees',

    policy_name     =>  'employees_policy',

    function_schema =>  'hr',

    policy_function =>  'auth_emp_dep_100',

    statement_types =>  'select,insert,update,delete',

   );

END;

 

BEGIN

  DBMS_REDEFINITION.START_REDEF_TABLE(

    uname          =>  'hr',

    orig_table     =>  'employees',

    int_table      =>  'employees_policy',

    col_mapping    =>  NULL,

    options_flag   =>  DBMS_REDEFINITION.CONS_USE_PK,

    orderby_cols   =>  NULL,

    part_name      =>  NULL,

    copy_vpd_opt   =>  DBMS_REDEFINITION.CONS_VPD_AUTO);

  END;

 

Which two statements are true about redefining the table? 
A. 
All the triggers for the table are disabled without changing any of the column names or column types in the table.
B. 
The primary key constraint on the EMPLOYEES table is disabled during redefinition. 
C. 
VPD policies are copied from the original table to the new table during online redefinition. 
D. You must copy the VPD policies manually from the original table to the new table during online redefinition. 

 

【題意簡述】

考察了對配置了VPD策略的表進行線上重定義時的注意事項

【考點分析】

首先 VPD 是什麼?VPD 全稱 Virtual Private Database (VPD),直譯為虛擬私人資料庫。啟用VPD以後,可以在行級和列級編輯安全策略,用來對資料庫進行訪問控制,保護企業中名敏感的資料!其原理可以理解為,VPD 自動為 SQL 語句新增動態的 Where 條件,使得檢索出來的資料符合定義的 VPD 策略。當使用者直接或間接的訪問被VPD策略所保護的某個表,檢視或同義詞時,Oracle資料庫使用VPD策略中定義的函式的返回結果來修改where子句中的謂詞條件,從而實現自動修改使用者的SQL語句。

例如,使用者執行了一個查詢:

SELECT * FROM OE.ORDERS;

 

VPD策略動態的追加上Where 條件,

SELECT * FROM OE.ORDERS WHERE SALES_REP_ID = 159;

 

這樣使用者僅僅可以檢索到 Sales Representative159的資料行了。如果需要針對使用者的session中的資訊,如使用者id,你可以使用上下文來實現!

SELECT * FROM OE.ORDERS WHERE SALES_REP_ID = SYS_CONTEXT(‘USERENV','SESSION_USER');

 

VPD 策略可以應用在Selectinsertupdatedeleteindex語句中,但不能支援過濾DDL語句,如truncate tablealter table

 

線上重定義可以改變表的結構,同時對重定義過程中表上的DML語句影響非常小。因為獨佔鎖模式所經過的時間視窗比較短。主要操作透過DBMS_REDEFINITION包來完成。而線上重定義的表上同時有VPD策略,我們該如何處理呢?

首先 DBMS_REDEFINITION 包中提供了 copy_vpd_opt 引數,在 START_REDEF_TABLE 過程中使用 copy_vpd_opt 引數來處理VPD策略。copy_vpd_opt 引數可以指定如下一些內容:
  • DBMS_REDEFINITION.CONS_VPD_NONE引數用於源表沒有 VPD 策略時。
  • DBMS_REDEFINITION.CONS_VPD_AUTO引數用於 源表和中間表列名和型別相同時。要使用這個值,源表和中間表之間列的對映關係,也就是 col_mapping 引數,必須設定為 NULL 或者 ’*’ .還要注意,表的所有者和執行重定義的使用者在重定義期間都可以訪問中間表。
  • DBMS_REDEFINITION.CONS_VPD_MANUAL 引數,手工
    • 1. 源表有 VPD 策略,同時源表和中間表有列的對映關係。
    • 2. 在重定義中,需要修改和新增 VPD 策略

答案剖析
A:源表的觸發器複製到中間表後,在同步資料時,中間表的觸發器會被觸發,導致資料出現不一致,因此要關閉中間表的觸發器,所以 A 正確。
B:
題目中的 ”options_flag => DBMS_REDEFINITION.CONS_USE_PK” 引數,說明使用主鍵來保證重定義過程中的唯一性,因此主鍵不會禁用,所以 B 錯誤。
C:
重定義中VPD策略的處理方法使用的是 DBMS_REDEFINITION.CONS_VPD_AUTO,含義為自動複製源表的VPD策略,所以 C 正確。
D:
如果使用 DBMS_REDEFINITION.CONS_VPD_MANUAL 引數,才需要手工複製源表的VPD策略,所以 D 不正確。

 

【答案】 A,C



~~~~~~~ the end~~~~~~~~~

hoegh
2016.05.11

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-2097612/,如需轉載,請註明出處,否則將追究法律責任。

相關文章