Total Pageviews

December 21, 2018

12/21/2018 01:21:00 AM
Oracle has introduced session specific global temporary table MO_GLOB_ORG_ACCESS_TMP to hold operating units available for user session/responsibility.
If profile “MO: Security Profile” is set, table gets populated with all operating units user has access to within responsibility. Whereas If profile “MO: Operating Unit” is set, table gets populated with single operating unit specified in profile.

Table gets operating unit data filled as soon as mo_global.init routine is called. MO_GLOBAL.set_policy_context initializes table with specific Org context needs (Single or Multi).

  Option 1: Single security profile can hold one or more Operating Units or Hierarchy. Profiles “MO: Security Profile” and “MO: Default Operating Unit” work in combination.

Option 2: Profile “MO: Operating Unit” still can be used along with profile “Initialization SQL Statement – Custom Profile”, set as mo_global.init(‘S’,null) to supports backward compatibility.

A table is created in ONT Schema, named oe_order_headers_ALL

b. A synonym named oe_order_headers_ALL is created in APPS schema, referring to PO.oe_order_headers_ALL

c. Another synonym named oe_order_headers is created in APPS, referring to oe_order_headers_ALL

d. A Row Level security is applied to oe_order_headers, using package function MO_GLOBAL.ORG_SECURITY.
This can be double-checked by running SQL select * from all_policies where object_name='oe_order_headers'

e. The effect of this policy is that,whenever you access oe_order_headers, Oracle RLS(Row level security) will dynamically append WHERE CLAUSE similar to below

SELECT * FROM oe_order_headers WHERE EXISTS (SELECT 1 FROM mo_glob_org_access_tmp oa WHERE oa.organization_id = org_id)

Purpose of mo_global.init :-
It will check if new Multi Org Security Profile is set, to decide if new Security Profile method will be used.
If the new MO security profile is set, then mo_global.init inserts one record, for each Organization in Org Hierarchy, in table  mo_glob_org_access_tmp

When & from where is mo_global.init called ?
This package procedure will be called as soon as you login or as soon as you switch responsibility. Just like FND_GLOBAL.INITIALIZE is called. It is safe to assume that Oracle will invoke MO_GLOBAL.INIT after FND_GLOBAL.INITIALIZE
Related Posts Plugin for WordPress, Blogger...