日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle ebs 多组织屏蔽的研究

發布時間:2025/4/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle ebs 多组织屏蔽的研究 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.1 具有OU屏蔽的表例子


SELECT t.org_id, t.* FROM po.po_headers_all t --無屏蔽表,在PL/SQL運行有數據 SELECT t.org_id, t.* FROM apps.po_headers t --包含OU屏蔽,在PL/SQL中查詢無數據


1.2 多組織屏蔽原理


a. PO Schema 上創建一張表, 命名為 PO_HEADERS_ALL
b. APPS schema 上創建一個同義字(synonym) PO_HEADERS_ALL , 指向 PO.PO_HEADERS_ALL
c. APPS 中別一個同義字(synonym) 被創建: PO_HEADERS, 指向 PO_HEADERS_ALL
d. 通過使用 MO_GLOBAL.ORG_SECURITY, 行級別的安全被應用于 PO_HEADERS.
這個可以通過運行 SQL select * from all_policies where object_name='PO_HEADERS' 來再次確認
e. 這個策略的影響是無論何時當你訪問 PO_HEADERS , Oracle RLS 會動態的擴展WHERE 條件語句,
SELECT * FROM PO_HEADERS WHERE EXISTS (SELECT 1 FROM mo_glob_org_access_tmp oa WHERE oa.organization_id = org_id)



1.3 通過模擬登錄使apps.po_headersPL/SQL中可以查詢到數據

BEGINfnd_global.apps_initialize(user_id => 1433, resp_id => 50691,resp_appl_id => 222);mo_global.init('M'); END;


其中apps_initialize參數可以通過如下步驟獲取值:

1.幫助->診斷->檢查

2.“塊”中填寫值:$PROFILES$

3.在字段里分別填寫:user_idresp_idresp_appl_id獲取值

4.模擬登錄完以后,就可以在PL/SQL中運行查詢語句

SELECT t.org_id, t.* FROM apps.po_headers t --模擬登錄以后,查詢包含數據


1.4 mo_glob_org_access_tmp 表介紹


a. 通過第二點我們知道:當你訪問 PO_HEADERS , Oracle RLS 會動態的擴展WHERE 條件語句,如:

SELECT *FROM po_headersWHERE EXISTS (SELECT 1FROM mo_glob_org_access_tmp oaWHERE oa.organization_id = org_id)

a. 在沒有運行模擬登錄前查詢表mo_glob_org_access_tmp,為空值。這時WHERE語句為假,所以我們直接查詢po_headers會發現找不到任何數據。


b. 運行模擬登錄以后,再次查詢表mo_glob_org_access_tmp,得到如下查詢結果:


a. 這時重新查詢po_headers,發現可以找到數據了。通過數據分析發現找到的數據和允許查詢的數據時一致的:


a. 所以我們可以得出結論:當運行“模擬登錄”的時候,系統會插入允許訪問的ORG_ID到數據庫表mo_glob_org_access_tmp里。當查詢包含OU屏蔽的表時,系統自動判斷當前sessionmo_glob_org_access_tmp表允許查詢出的ORG_ID,所以我們就可以訪問這些org_id的數據了。


a. 當我們從表mo_glob_org_access_tmp刪除一條數據,例如刪除第一條數據:81 OU_AWL時,重新查詢po_headers表,發現得到如下數據:


a. 當我們重新打開一個session,在沒有模擬登錄的情況下,我們直接插入ORG_ID到表mo_glob_org_access_tmp中時,重新查詢表po_headers,發現也是可以得到數據的。所以我們可以得出以下結論


當你訪問 PO_HEADERS , Oracle RLS 會動態的擴展WHERE 條件語句

SELECT *FROM po_headersWHERE EXISTS (SELECT 1FROM mo_glob_org_access_tmp oaWHERE oa.organization_id = org_id) a. 當在你session中的Multi Org初始化之后, 表 mo_glob_org_access_tmp 中, 你的 session 會有 X 條記錄 . X 表示的是被賦予 MO Security Profile 的組織機構的數量。

1.5 mo_global.init 的目的


它會通過檢查是否新的Multi Org Security Profile被設置來決定是否有新的 ?Security Profile 方法被使用.

如果設置了新的MO security profile, 那么 mo_global.init 會為在 Org Hierarchy 中的每個組織機構插入一條新的記錄到表 ?mo_glob_org_access_tmp 中。

這個方法會在你登錄后或者是切換職責后立即被調用. 就像FND_GLOBAL.INITIALIZE 被調用一樣, 可以安全的確定 Oracle 會在 FND_GLOBAL.INITIALIZE 之后調用 MO_GLOBAL.INIT


1.6 MO_GLOBAL.SET_POLICY_CONTEXT('S',101)作用

ORG_ID 101 會被賦予你當前的session.

在其內部, 當你對你的單個org設置上下文(Context),這段的代碼將會被執行: dbms_session.set_context('multi_org2', 'current_org_id', 101);




轉載于:https://blog.51cto.com/snans/1352377

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的oracle ebs 多组织屏蔽的研究的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。