2014-06-24 77 views
0

我有一個在VPD下運行良好的策略,並且我試圖隱藏列。 我知道我可以用這個:動態地隱藏Oracle VPD中的列

BEGIN 
DBMS_RLS.ADD_POLICY(
    object_schema   => 'scott', 
    object_name   => 'emp', 
    policy_name   => 'hide_sal_policy', 
    policy_function  => 'hide_sal_comm', 
    sec_relevant_cols  =>' sal,comm', 
    sec_relevant_cols_opt => dbms_rls.ALL_ROWS); 
END; 

但這樣只會隱藏預先確定的列,其中有「SAL」和「通訊」。

我想這樣做是有一個包含我想隱藏的列的引用的參考表:

SCHEMA TABLE COLUMNS_TOHIDE 
my_schema my_table my_column1;my_column2 
my_schema2 my_table2 my_column3;my_column4;my_column5 

理想的情況下,自動將添加該策略生成的代碼。

目標是儘可能使策略成爲「敏捷」,以便如果非實驗用戶想要隱藏新列,他們唯一要做的就是更改引用表,而不是修改某些Oracle代碼。

感謝您的幫助

回答

2

首先,我不是這個級別的敏捷性的大風扇。一般來說,如果您已經到了使用VPD的地步,這意味着您已經對哪些列包含敏感數據做了一些分析。將列重新歸類爲敏感或添加新的敏感列應該涉及合理的分析級別。它幾乎總是涉及到審計人員和其他人的審查文件的更新。讓開發人員從列表中添加或刪除列所需的工作量應該在事物的方案中相當微不足道。此外,如果您可以方便人們添加新列,則可以讓人們輕鬆地從列表中刪除敏感列,運行一些查詢來提取數據,然後快速重新隱藏列。這看起來像是一大筆工作,用於實現最低收益。

這就是說,如果你想要做這樣的事情,你可以

  • 到隱藏列的表創建一個觸發器。
  • 在此觸發器中,使用dbms_job包提交在事務提交後運行的作業。這項工作然後會調用generateVPDPolicy程序。
  • generateVPDPolicy過程然後將查詢列表以隱藏並將生成適當的VPD策略。

這意味着將有可能成爲第二個或兩個的延遲(或更多,取決於你有什麼其他的後臺作業和你job_queue_processes設置)時的變化被提交,當VPD策略更新之間。這意味着現在有更多的移動部件可以在出現問題時進行調試。例如,如果有人在編輯列列表時出現拼寫錯誤,則該過程可能會拋出一個錯誤,該錯誤會寫入警報日誌(或者需要監視的某個自定義錯誤表)。如果某些原因導致作業無法運行(通常將job_queue_processes設置爲0作爲某些修補程序/升級腳本的一部分,並忘記將其重新放回原處),則需要有人知道要調試該作業。大多數情況下,這應該工作得很順利。然而,當某些事情失敗時,現在比起計劃構建的一部分簡單的VPD策略功能更改,現在已經有了更復雜的系統。

+0

謝謝! 我會重新考慮你的意見與我的團隊。我知道處理參考表中的數據似乎很簡單,但如果只有少數人能夠訪問它,那麼它周圍就有一些「安全」。此外,當我們的分析師完成他們的分析(可能添加應該隱藏的列)時,這並不是爲了困擾繁忙的DBA。我明白你的觀點,並會提交商業案例。再次感謝您的步驟! – Stephane