这是多组织访问的第三篇文章,翻译自Anil
Passi
MO_GLOBAL-Dive
into R12 Multi Org Design

我希望你已经读了文章 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).

MO_GLOBAL - EBS R12 中 Multi Org 设计的深入研究 (3)的更多相关文章

  1. MO_GLOBAL - EBS R12 中 Multi Org 设计的深入研究 (2)

    这是多组织访问的第二篇文章,翻译自Anil Passi的Multi Org R12 我们都知道,在Oracle Release 12中多组织模型(Multi Org)会被改变, 它被叫作多组织访问控制 ...

  2. MO_GLOBAL - EBS R12 中 Multi Org 设计的深入研究(1)

    在改EBS的BUG过程中,会在网上查找很多资料,这次是碰到一个多组织(Multi Org)的问题,发现Anil Passi写的几篇文章不错,慢慢的会陆续翻译过来,这次翻译的是http://getapp ...

  3. 更改EBS R12中forms的模式Servlet/Socket

    EBS R12中forms的模式有:Servlet mode 和 Forms Socket mode 当我们完成Oracle EBS R12套件的快速安装后,forms的默认配置是Servlet mo ...

  4. EBS R12中FND凭证打印警告:OPP响应超时

    接近年关,最近年结忙的飞起,此为背景,今天运维那边反应日记账凭证打印报错,看了下后台请求发现请求有警告. 查看日志发现报了“并发:OPP响应超时”的警告,这个地方响应超时可能是配置文件中“并发:OPP ...

  5. EBS R12中重新enable失效用户之后,丢失职责

    以下请求跑完不能立即生效,需要等上一段时间! oracle support说这并不是一个bug,是一个问题,呵呵,bug和问题,都是你的错,oracle! 工 作中将某个用户失效之后,有可能又需要重新 ...

  6. R12中注册客户化应用为多组织应用

    Oralce EBS R12中引入了MOAC的控制,所有多OU的表对象都添加了数据库VPD的控制策略,需要访问这些对象中的数据,首先需要进行多组织环境的初始化,但是如果客户化的应用中也需要具备多OU的 ...

  7. Oracle EBS R12 XML数据表格的Excel脚本报表

    http://www.cnblogs.com/quanweiru/archive/2012/07/28/2612680.html 一.概述 在EBS系统中,报表是一个非常重要的客户化开发内容,也是系统 ...

  8. Oracle EBS R12多组织(多OU)访问架构

    Oracle EBS R12多组织访问架构 多组织架构实现了经营单位(OU)的数据安全性,在底层数据表中有一列ORG_ID来记录数据所属的经营单一,所有多OU的基表都是以"_ALL" ...

  9. Oracle Ebs R12 SLA与GL关系变化

    http://www.cnblogs.com/bruce_zhao/p/3809886.html Oracle Ebs R12 SLA与GL关系变化 SLA概念:SLA(Subledger Accou ...

随机推荐

  1. P20 旅行助手,从未有过的至尊私人导游服务!

    旅行可以让人暂时抛掉生活中的琐事,工作上的压力,寻找内心的宁静.有的人是为了想多去见识不同的事物和人文风情,有的人是想去感受大自然的馈赠,看历史古迹感受古人智慧.歌德说过:人之所以爱旅行,不是为了抵达 ...

  2. 四柱加强版汉诺塔HanoiTower----是甜蜜还是烦恼

    我想很多人第一次学习递归的时候,老师或者书本上可能会举汉诺塔的例子. 但是今天,我们讨论的重点不是简单的汉诺塔算法,而是三柱汉诺塔的延伸.先来看看经典的三柱汉诺塔. 一.三柱汉诺塔(Hanoi_Thr ...

  3. Mysql B-Tree, B+Tree, B*树介绍

    [摘要] 最近在看Mysql的存储引擎中索引的优化,神马是索引,支持啥索引.全是浮云,目前Mysql的MyISAM和InnoDB都支持B-Tree索引,InnoDB还支持B+Tree索引,Memory ...

  4. 40. Combination Sum II(midum, backtrack, 重要)

    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...

  5. RedHatEnterpriseLinuxServerRelease7.3上配置vsftp服务器

    1.vsftpd 服务启停相关命令 systemctl start vsftpd systemctl stop vsftpd systemctl restart vsftpd 2.配置文件/etc/v ...

  6. C++格式化输出浮点数

    主要内容 介绍C++中如何格式化输出浮点数. 控制浮点数输出格式需要包含iomanip头文件. 使用fixed来控制输出的浮点数的小数位是固定的.可参考http://en.cppreference.c ...

  7. android addCategory()等说明

    一.隐式意图介绍 显式意图我们前面已经提到,形如: Intent intent = new Intent(); intent.setClass(this,Other.class);//此句表示显式意图 ...

  8. 在线看Android系统源码,那些相见恨晚的几种方案

    请尊重分享成果,转载请注明出处,本文来自逆流的鱼yuiop,原文链接:http://blog.csdn.net/hejjunlin/article/details/53454514 前言:最近在研究M ...

  9. Unity UGUI实现分段式血条

    我们可以看到像英雄联盟等游戏里英雄头顶的血条显示并非是纯色的,而是根据血量的多少而显示一定量的格子,这种方式明显是比较友好.比较美观的,事实上我们的游戏里面也想实现这样的效果,那该怎么办呢?根据血量的 ...

  10. 用scheme最基本的元素定义排序函数

    用到的元素有9个: define,if,null?,cons car,cdr,lambda,let,named let, 其实let 和 named let可以去掉.但那样会带来性能和可读性下降的问题 ...