解除OU屏蔽(EBS检查无法直接查询解决)

解除OU屏蔽(EBS检查无法直接查询解决)


具有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中查询无数据

image-20231020090944388

image-20231020090849182

多组织屏蔽原理

1. 在PO Schema 上创建一张表, 命名为 PO_HEADERS_ALL

2. 在APPS schema 上创建一个同义字(synonym) PO_HEADERS_ALL , 指向 PO.PO_HEADERS_ALL

3. 在APPS 中别一个同义字(synonym) 被创建: PO_HEADERS, 指向 PO_HEADERS_ALL

4. 通过使用 MO_GLOBAL.ORG_SECURITY, 行级别的安全被应用于 PO_HEADERS.

5. 这个可以通过运行 SQL 
	select * from all_policies where object_name='PO_HEADERS' 来再次确认

6. 这个策略的影响是无论何时当你访问 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)

通过模拟登录使apps.po_headers在PL/SQL中可以查询到数据

BEGIN
  fnd_global.apps_initialize(user_id      => 0 /* FND_GLOBAL.USER_ID*/, -- 请求提交用户ID
                             resp_id      => 56736, -- 请求提交职责ID
                             resp_appl_id => 222); -- 职责应用
  mo_global.init('M');
END;

SELECT * FROM mo_glob_org_access_tmp;

其中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     -- 模拟登录以后,查询包含数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J.T.L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值