12c OCP題庫解析060-2 對配置了VPD策略的表進行線上重定義
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 Representative為159的資料行了。如果需要針對使用者的session中的資訊,如使用者id,你可以使用上下文來實現!
SELECT * FROM OE.ORDERS WHERE SALES_REP_ID = SYS_CONTEXT(‘USERENV','SESSION_USER');
VPD 策略可以應用在Select,insert,update,delete,index語句中,但不能支援過濾DDL語句,如truncate table或alter 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 10g線上重定義新特性——對單獨的分割槽進行線上重定義
- Oracle 12.2 聯機重定義使用VPD策略的表並修改表的列名Oracle
- 資料庫表的線上重定義資料庫
- Oracle 12.2 聯機重定義使用VPD策略的表並不修改表的任何列Oracle
- oracle 表線上重定義Oracle
- oracle表線上重定義Oracle
- 【Oracle】線上重定義表Oracle
- Oracle表的線上重定義(一)Oracle
- Oracle中重建表的線上重定義Oracle
- oracle線上重定義表步驟Oracle
- dbms_redefinition線上重定義表
- 利用DBMS_REDEFINITION線上重定義表
- 線上重定義表ORACLE 11GOracle
- oracle分割槽表線上重定義欄位not null問題OracleNull
- 線上重定義拷貝表結構的NOT NULL約束問題Null
- ORACLE 線上重新定義表分割槽表重定義為普通表。Oracle
- 【TABLE】oracle表線上重定義注意事項Oracle
- oracle實驗記錄 (線上重定義表)Oracle
- 線上重定義引起的資料庫掛起資料庫
- oracle 線上重定義Oracle
- Oracle線上重定義Oracle
- 避免對派生的非虛擬函式進行重定義函式
- Oracle的線上重定義(轉)Oracle
- 在oracle 9i下線上重定義表Oracle
- 普通錶轉換分割槽表-線上重定義
- 分割槽表和dbms_redefinition包線上重定義表
- 避免對派生的非虛擬函式進行重定義薦函式
- 線上重定義分割槽表和NOLOGGING APPEND分割槽表對比APP
- 使用DBMS_REDEFINITION線上重定義表普通表為分割槽表
- 使用ORACLE線上重定義將普通表改為分割槽表Oracle
- 線上重定義 ?普通錶轉換成分割槽表
- OCM實驗-使用線上重定義方式遷移表
- 海量資料處理_表分割槽(線上重定義)
- 【Oracle】利用線上重定義的方式改變普通表為分割槽表Oracle
- 12c OCP題庫解析060-3 SYSAUX表空間所含元件的的管理方法UX元件
- 使用DBMS_REDEFINITION包執行線上重定義表(ONLINE TABLE REDEFINITION)
- 利用線上重定義功能將普通錶轉換為分割槽表問題
- 使用線上重定義方法改造普通表為分割槽表實戰