我希望你已经读了文章 EBS R12 中的 Multi Org . 当我们在思考R12中的 Multi Org 时,总有一些问题会出现在脑海中, 对这些问题最好的分析就是打开包 MO_GLOBAL,别担心你还没有装R12,  MO_GLOBAL在11.5.10 就已经有了, 现在让我们开始吧.

在R12中,CLIENT_INFO是如何被替换的呢? 
我们先来举个例子.
在R12之前的版本, 你通过以下方法来创建表 PO_HEADERS_ALL
a. 在PO Schema 上创建一张表, 命名为 PO_HEADERS_ALL
b. 在APPS schema 上创建一个同义字(synonym) PO_HEADERS_ALL , 指向 PO.PO_HEADERS_ALL
c. 在APPS schema 上创建视图PO_HEADERS: "select * from po_headers_all where org_id=client_info"

但是在R12中,下面的事情将会发生:
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) 
也请参考下面的 **** .

 

是否这就意味着,如果我创建一张新的客制化的表,我就要把RLS [ Row Level Security ] 应用在这张表上?
是的没错, 如果这张表包含着以ORG_ID来区分的数据, 那就应该这样. 在这个例子中你所要做的就是将包里的功能MO_GLOBAL.ORG_SECURITY 赋予那些 表/同义字/视图.

Multi Org 的RLS[Row Level security]是否也会被应用在 表/同义字/视图 上呢?
理论上是这样的, RLS 能被应用在以上的任意一个对象中, 但是在实践中,你只会将 RLS 应用在 APPS Schema 中的对象, 这意味着, 你最有可能的就是把RLS应用在同义字上. 基本上, 现在Multi Org 视图已经被受 RLS 保护的同义字替换, 但是, 当访问R12之前版本的Multi-Org安全视图时, 我们不需要修改现有的代码. 现在, 根据ORG_ID来实现数据安全访问的职责依赖于RLS[也被叫作 VPD - Virtual Private Database].

我已经对我的 Multi Org Security Profile 做了些改变, 方式是通过附加一个新的Org层次, 我还需要运行其它的程序吗?

就像我们在HRMS中所做的一样, 所建议的是在Security Profiles上做任何改变后, 都运行程序 "Security List Maintenance"

什么是MO_GLOBAL.INIT
mo_global.init 的目的 :-
它会通过检查是否新的Multi Org Security Profile被设置来决定是否有新的  Security Profile 方法被使用.
如果设置了新的MO security profile, 那么 mo_global.init 会为在 Org Hierarchy 中的每个组织机构插入一条新的记录到表  mo_glob_org_access_tmp 中

mo_global.init 是在何时何地被调用的 ?
这个方法会在你登录后或者是切换职责后立即被调用. 就像FND_GLOBAL.INITIALIZE 被调用一样, 可以安全的确定 Oracle 会在 FND_GLOBAL.INITIALIZE 之后调用 MO_GLOBAL.INIT

mo_glob_org_access_tmp 是一张全局临时表(global temporary table)吗?
是的, 当在你session中的Multi Org初始化之后, 表 mo_glob_org_access_tmp 中, 你的 session 会有 X 条记录 . X 表示的是被赋予 MO Security Profile 的组织机构的数量 [在 security profile 中查看组织层次或者组织列表]

MO_GLOBAL.ORG_SECURITY 的目的是什么 ?
Row-Level-Security 的目的是隐藏某些数据[基于一些条件]. RLS 是通过扩展安全对象上的where条件语句来实现的.
1. MO_GLOBAL.ORG_SECURITY 的功能是返回WHERE条件语句
2. 这个where 条件语句会被扩展到那些已经启用Multi Org行级别安全的 表/同义字/视图 中

MO_GLOBAL.SET_POLICY_CONTEXT 的目的是什么?
这个 procedure 有两个参数
    p_access_mode
          当你想让你当前的session只会对一个ORG_ID工作时, 输入"S"
          当你想让你当前的session只会对多个ORG_ID工作时, 输入"M"
    p_org_id
          只有当p_access_mode的值是"S"时才需要

在SQL*Plus中,我想对一个指定的Org[单个Org]设置session, 在R12中我该如何做呢?
SQL>> exec MO_GLOBAL.SET_POLICY_CONTEXT('S',101);
在上面的例子中, ORG_ID 101 会被赋予你当前的session.
在其内部, 当你对你的单个org设置上下文(Context)时,这段 蓝色 的代码将会被执行: dbms_session.set_context('multi_org2', 'current_org_id', 101);

**** 如果当前的数据库session被初始化为单个Org[如上面的步骤], 那么在行级别安全(Row-Level-Security)上扩展到对象的 Where 语句就会是
WHERE org_id = sys_context('multi_org2','current_org_id')

为什么我作为一个应用程序技术人员会使用 MO_GLOBAL.SET_POLICY_CONTEXT 呢?

我们假设你想在ORG_ID为101下通过调用API来创建invoice, 但是这个API又没有Org_id的参数,那么你可以这样做:

a. e执行 MO_GLOBAL.SET_POLICY_CONTEXT('S',101)
b. 调用 Invoice API, 这将会在其内部从当前的MO上下文(Context)中读取ORG_ID.

在SQL*Plus中,我想模拟一次登录到指定的职责上,我该如何做?
a. 调用 FND_GLOBAL.INITIALIZE
这将会设置你的职责ID,用户ID等等(responsibility id, user_id)
b. 调用 MO_GLOBAL.INIT

这将会你的的职责/用户中读取 MO配置选项的值,并且初始化多组织访问(Multi Org Access).

转载于:https://www.cnblogs.com/huak/p/9874929.html

EBS MOAC深入研究(转)相关推荐

  1. oracle eco 开放接口,请教API来做ECO变更的例子,感谢!!

    我是参考以下例子做的,发贴者说可以,但我试却没有效果. 例子的链接:ECO interface sample 包括create,change,disable 我的系统是EBS R12,研究了好久,无果 ...

  2. Oracle EBS NETSUITE,OracleCloud、NetSuite对比研究

    我们将按照如下的维度进行对比: 产品架构.使用什么样的技术平台?应用如何扩展? 功能广度.覆盖哪些企业管理领域? 功能深度.应用领域管的细不细? 产品成熟度.功能性.易用性.安全性.健壮性达到什么程度 ...

  3. oracle ebs 多组织屏蔽的研究

    1.1 具有OU屏蔽的表例子 SELECT t.org_id, t.* FROM po.po_headers_all t --无屏蔽表,在PL/SQL运行有数据 SELECT t.org_id, t. ...

  4. Oracle EBS渗透测试工具

    ERP安全是IT安全的独立部分.如今,ERP代表了各种基于不同技术编写的各种工具和服务.在安全领域拥有适当的知识和便于管理的工具是至关重要的. 当我们在探索Oracle电子商务套件安全性时,我们注意到 ...

  5. oracle+中子分类账,【勇猛精进】Oracle EBS R12 总帐和子分类账关系详解

    子模块和GL之间关联的变化 12i在功能模块上的变化很多,比如,基本每个模块都启用了MOAC特性,新增加了子帐模块,税模块等等很多新的模 块,OPM库存和离散库存集成了.不过这些变化中,大部分不是我们 ...

  6. oracle ebs 基于host(主机文件)并发程序的开发,Oracle EBS 基于Host(主机文件)并发程序的开发...

    您可以将程序命名为 .prog,其中 是在"可执行并发程序"窗口的"执行文件"字段中输入的值.然后,使用执行文件名(无扩展名)创建与 fndcpesr 的符号链 ...

  7. Oracle EBS 入门

    Oracle EBS 入门 Oracle EBS全称是Oracle 电子商务套件(E-Business Suit),是在原来Application(ERP)基础上的扩展,包含ERP(企业资源计划管理) ...

  8. Oralce EBS Alert

    Alert 是一种Oracle系统中的一种机制,它可以监视系统数据库,在规定的情况下给规定用户一个通知,通知可以是邮件或者其他形式,在标注的系统和客户化系统中都是可以定义使用的.有两种类型的Alert ...

  9. 使用WebService与Oracle EBS进行集成(下)

    上面一期简要介绍了一下思路,这一篇文章讲一下实现. 接上文 二.架构 系统从总体上分为两部分,一部为企业的EBS及接口系统,第二部分为第三方厂商自建系统. 在企业总部系统部分,又分为两部分,一部分为W ...

最新文章

  1. python做定时任务的方式及优缺点_python BlockingScheduler定时任务及其他方式的实现...
  2. Linux grep,egrep及相应的正则表达式用法详解
  3. python中常见的流程结构-常见数据结构的 Python 实现(建议收藏)
  4. ubuntu12.04LTS 安装eclipse和cdt
  5. go 判断元素是否在slice_Go内置数据结构原理
  6. Hibernate框架整合DM数据库
  7. 用python设计学生管理系统_Django实现学生管理系统实例分享
  8. mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
  9. Pycharm 加载pygame解决方案
  10. 中国专业开发者最多,最受 Web 服务青睐,Java 8 为最受欢迎版本 | 2020 年 Java 开发现状大调查...
  11. layui的轮播图片自适应大小_如何使用LayUI实现网页轮播图
  12. Tensorflow2.5安装
  13. css3的一些知识点
  14. 一次 注册dll失败 的经历
  15. pyhton根据城市名称获取省份名称
  16. Eclipse配置 eclipse Java 配置 eclipse 简单配置 Eclipse 插件 配置 推荐 eclipse插件 eclipse 必备插件
  17. 搬运:php入门安装教程
  18. php网站页面显示源码,用PHP显示网站的源代码
  19. vue和socket.io开发简单web聊天室
  20. Richardson外推加速技术(含Romberg详细分析)的Matlab实现

热门文章

  1. Redis入门之Redis安装、配置及常用指令
  2. 数据分析避坑必读:让人怀疑人生的七大悖论
  3. 多数据源报表解析之简单多源报表
  4. java继承类长方形面积_java_java用接口、多态、继承、类计算三角形和矩形周长及面积的方法,本文实例讲述了java用接口、多 - phpStudy...
  5. JAVA将list2合并到list1_java如何将两个list合并的问题
  6. python选择日期控件_Python3 自己写了个DateCtrl日期控件 | 学步园
  7. python图像对比度增强图片清晰度_Python 图像对比度增强的几种方法(小结)
  8. html 控制边框长度,如何控制CSS边框长度的示例代码分享
  9. 前端Vue3中级视频(240分钟)评分95分
  10. 后端用java还是python_【后端开发】已学php再学java还是python?