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_headers在PL/SQL中可以查询到数据BEGIN
fnd_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_id、resp_id、resp_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_headers
WHERE EXISTS (SELECT 1
FROM mo_glob_org_access_tmp oa
WHERE 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屏蔽的表时,系统自动判断当前session的mo_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_headers
WHERE EXISTS (SELECT 1
FROM mo_glob_org_access_tmp oa
WHERE 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.INIT1.6 MO_GLOBAL.SET_POLICY_CONTEXT("S",101)作用ORG_ID 101 会被赋予你当前的session.在其内部, 当你对你的单个org设置上下文(Context)时,这段的代码将会被执行: dbms_session.set_context("multi_org2", "current_org_id", 101);更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12Oracle里大数据保存至CLOB解决方法MySQL数据库CPU飙升紧急处理方法相关资讯 Oracle EBS
- 登录Oracle EBS系统遭遇Tomcat页面 (06/06/2014 19:49:49)
- Oracle EBS DBA常用SQL - 安装/补 (11/23/2012 10:44:12)
- 一段Oracle EBS中给指定用户增加指 (11/23/2012 10:35:22)
| - Oracle EBS 克隆之数据库克隆 (12/03/2012 15:43:13)
- Oracle EBS - 利用PLSQL取得apps密 (11/23/2012 10:40:46)
- Oracle EBS安装中文patch (08/31/2012 10:35:16)
|
本文评论 查看全部评论 (0)