close

R12的環境新增了一項 MOAC的功能,讓使用者可以在進入到一個Responsibiity後,能切換不同的OU,

操作人員就不用切換不同的Responsiblity 來使用資料,此功能搭配了Database的功能,讓此作業能夠實現.

接下來我們就來討論一下這二者之間的關係.

1. MOAC 

  •   Oracle EBS的多組織架構(Multi-Org Architecture)在R12版之後有了新功能Multiple Organizations Access Control (MOAC)。
  •   A  single  application  responsibility can now access, process and report  on multiple operating units 
  •  Perform tasks for Multiple operating units without changing  responsibilities

2. 設定moac

  •     設定Security  profile

  

  •    維護Security profile (Setup – Run System List Maintenance)

   

3.設定system Profile

  •    MO:Operating Unit 為11i所使用的profile,在r12中仍然有其功效. 若未設定Security profile 時,就捉取此profile的值.
  •    MO:Security Profile:若要啟動Security Profile請於profile中設定.
  •    MO:Default Operating Unit ,若有設定security profile 時,可為Security profile中的其中一個value值(預設),搭配security profile使用.

4. 測試成果: 若有使用moac,就可透過畫面上來切換不同的Operating unit.


  5. VPD 說明

       MOAC的實現是通過Oracle資料庫的VPD(Virtual Private Database)技術來實現的。 VPD技術提供了資料庫物件

(Table,Synonym,View)Row level 的控制。使用VPD技術可以有效地限制User獲取數據的範圍。

  相關 View  & package

  •   VPD   View: dba_policies
  •   VPD   Package: DBMS_RLS.add_polic

  6.範例

  •     .平常查詢VPD表

          select * from PO_HEADERS; --No Output

  •      使用 Single OU Mode

        BEGIN

           mo_global.set_policy_context('S',204);

            --204為ORG_ID,S表示Single Org Context

        END;

        select * from PO_HEADERS; --會輸出OU:204 的所有PO

  • Multiple OU Mode(simulate login to a specific responsibility)

      a. Call fnd_global.apps_initialize(userid,resp_id,resp_appl_id);

      b. call MO_GLOBAL.INIT(p_appl_short_name);

      This will read the MO profile option values for your responsibility/user, and will initialize the Multi Org Access.

     c. select*from po_headers

  7. MOAC的開發相關的Public API

  • Package 名稱: MO_GLOBAL

       檔案位置: patch/115/sql/AFMOGBLS.pls

       說明: 供程式呼叫啟動MOAC初始值相關的APIs

    

     

  •     Package 名稱: MO_UTILS
       檔案位置: patch/115/sql/AFMOUTLS.pls    說明:  MOAC主要功能的API

      

8. VPD DB 範例

--VDP Sample
--1.Create table
  create table demo (x number);    
  insert into demo values (1);   
  insert into demo values (2);   
  insert into demo values (10001);   
  insert into demo values (10002);   
  commit;   

--2.Create function
CREATE OR REPLACE FUNCTION f_limited_query_t (s_schema IN VARCHAR2,   
                                              s_object IN VARCHAR2)   
RETURN VARCHAR2   
AS
BEGIN
RETURN 'X <= 10001';   
END;   

--3.add policy
BEGIN
   DBMS_RLS.add_policy (object_schema   => 'APPS',   
                        object_name     => 'DEMO',   
                        policy_name     => 'POLICY_LIMITED_QUERY_T',   
                        function_schema => 'APPS',   
                        policy_function => 'F_LIMITED_QUERY_T');   
END;

--4. test
select * from DEMO

--5.Check policy is exist
SELECT * FROM DBA_POLICIES WHERE OBJECT_NAME='DEMO'


arrow
arrow
    全站熱搜

    alad 發表在 痞客邦 留言(0) 人氣()