1. MOAC简介

MOAC(Multi-Org Access Control)为多组织访问控制,是Oracle EBS R12的重要新功能。它可以实现在一个Responsibility下对多个OU(Operation Unit)进行操作,允许用户在不切换Responsibility的情况下,处理多个OU组织的事物。

UseràResponsibilityàSingle Operation Mode/Multiple Operation Unit Mode

2.    MOAC

         2.1、相关配置文件

1) MO:Security Profile(MO:安全性配置文件)

定义业务组

提交安全性请求

2) MO:Default Operation Unit(MO:默认业务实体)

3) MO:Operation Unit(MO:业务实体)

    2.2、逻辑控制 

1) 如果MO:Security Profile没有设置,MO:Operation Unit的优先级大于MO:Default Operation Unit,将默认MO:Operation Unit设置的OU

2)如果设置了MO:Security Profile,且当前Responsibility仅能访问单个OU,将直接默认该OU,忽略MO:Default Operation Unit

3)如果设置了MO:Security Profile,且当前Responsibility可访问多个OU,首先将校验MO:Default Operation Unit设置的值是否在MO:Security Profile中,若存在,则默认MO:Default Operation Unit的值,否则为空。

4) 一个配置文件又分地点、应用产品、责任、用户层,默认级别为:用户>责任>应用>地点。

     2.3、查看可用MOAC模块

MOAC需要应用程序做支持才能启用,所以在启用MOAC之前,需要清楚哪些应 用程序支持MOAC特性。

SELECT fmp.application_short_name FROM fnd_mo_product_init fmp WHERE fmp.status='Y' ;

也可对应用改程序注册 MOAC 支持,或取消 MOAC 支持

注册:fnd_mo_product_init_pkg.register_application

取消:fnd_mo_product_init_pkg.remove_application

3.    VPD

     MOAC是通过Oracle数据库的VPD(Virtual Private Database)技术来实现的,VPD技术提供了数据库对象(表、同义词、视图)

行级别访问的控制,使用VPD技术可以有效的限制用户获取数据的范围。

         3.1 VPD工作方法

将一个或多个安全策略与表或视图关联后,就可以实现VPD。当对带有安全策略的表进行直接或间接访问时,数据库将调用一个实施该策略的函数,该策略函数返回一个访问条件(WHERE 字句),应用程序将它附加到用户的SQL语句,从而动态修改用户的数据访问权限。

例如:实现需求只允许某个用户查询管理员工表的数据,则VPD自动会将查询语句SELECT * FROM fnd_user添加查询条件

SELECT * FROM fnd_user where user_name = ‘HAND_CW’,其中‘where user_name=’HAND_CW’为VPD安全性策略函数返回的字符串。

       3.2 VPD内容

1) policy_function

策略函数是作用在对象(表、视图、同义词)上,根据应用程序上下文返回一个特定的谓词,即自动在查询表、视图时,加上返回的where条件。可使用dbms_rls.add_policy将对象与策略函数绑定。

查看R12 MOAC使用的策略函数

SELECT DISTINCT  dp.policy_name,

dp.package || '.' || dp.function,

dp.policy_type

FROM dba_policies dp

WHERE dp.policy_name = 'ORG_SEC';

2)policy_type

策略函数创建并返回的字符串具有很强的动态性,为了保证结果,提高性能,R12有一下几种策略类型:

context_sensitive,shared_context_sensitive,shared_static、static

设置策略函数的策略类型:

Dbms_rls.add_policy(policy_type => dbms_fls.shared_context_sensitive);

     3.3 创建客户化表的VPD屏蔽

表:CUX_FREIGHT_INFO_HEADERS_ALL,同义词:CUX_FREIGHT_INFO_HEADERS

为同义词CUX_FREIGHT_INFO_HEADERS添加VPD屏蔽

BEGIN

dbms_rls.add_policy(object_schema   => 'CUX', --数据表(或视图)所在的Schema名称

object_name     => 'CUX_FREIGHT_INFO_HEADERS ', --数据表(或视图)的名称

policy_name     => 'ORG_SEC ', --POLICY的名称,主要用于将来对Policy的管理

function_schema => 'CUX', --返回Where子句的函数所在Schema名称

policy_function => 'MO_GLOBAL.ORG_SECURITY', --返回Where子句的函数名称

policy_type     => dbms_rls.shared_context_sensitive);

END;

创建该VPD屏蔽后,select * from CUX_FREIGHT_INFO_HEADERS没有返回结果集,

select * from CUX_FREIGHT_INFO_HEADERS_ALL可返回表的所有结果集

       3.4 删除VPD

BEGIN

dbms_rls.drop_policy(object_name => 'CUX_FREIGHT_INFO_HEADERS',

policy_name => 'ORG_SEC');

END;

        3.5 查看VPD

SELECT *

FROM user_policies t

WHERE 1 = 1

AND t.object_name = 'CUX_FREIGHT_INFO_HEADERS';

4.    支持MOACFORM开发

在R12版本中,OU的控制采购了MOAC的方式,是用户的操作得到了改善,如果客户化的form能够支持MOAC的功能,需要在界面上提供当前用户可选择的OU字段供用户选择。

         4.1 定义FORM参数

mo_default_org_id、mo_default_ou_name、mo_ou_count

         4.2 PRE_FORM

mo_global.init('CUX'); --根据应用去设置form为单OU或者多OU模式

mo_utils.get_default_ou(l_default_org_id, l_default_ou_name, l_ou_count);  --得到默认的OU

copy(l_default_org_id,'PARAMETER.mo_default_org_id');

copy(l_default_ou_name,'PARAMETER.mo_default_ou_name');

copy(l_ou_count,'PARAMETER.mo_ou_count');

IF nvl(l_ou_count, 0) <= 0 THEN--判断是否找到了OU,如果没有找到,则报错

fnd_message.debug('错误001:没有找到相应的OU,请联系系统管理员或开发人员!');

RAISE form_trigger_failure;

END IF;

IF l_default_org_id IS NOT NULL THEN

mo_global.set_policy_context('S', l_default_org_id);

END IF;

      4.3 WHEN_CREATE_RECORD

在带有OU的BLOCK的when-create_record中添加如下代码:

l_org_id_name     := name_in('System.Trigger_Block') || '.ORG_ID';

l_block_item_name := name_in('System.Trigger_Block') || '.OU_NAME';

IF :parameter.mo_default_org_id IS NOT NULL

AND name_in(l_org_id_name) IS NULL THEN

copy(:parameter.mo_default_org_id,

name_in('System.Trigger_Block') || '.ORG_ID');

copy(:parameter.mo_default_ou_name,

name_in('System.Trigger_Block') || '.OU_NAME');

set_item_property(l_block_item_name,

item_is_valid,

property_true);

END IF;

     

 

 

 

 

 

备注:mo_utils.get_default_ou(l_default_org_id, l_default_ou_name, l_ou_count);

函数代码如下:

      PROCEDURE get_default_ou(p_default_org_id  OUT NOCOPY NUMBER,

p_default_ou_name OUT NOCOPY VARCHAR2,

p_ou_count        OUT NOCOPY NUMBER) IS

l_prof_org_id     hr_operating_units.organization_id%TYPE;

l_default_org_id  hr_operating_units.organization_id%TYPE;

l_default_ou_name hr_operating_units.name%TYPE;

BEGIN

p_ou_count := mo_global.get_ou_count;

IF (get_multi_org_flag <> 'Y' OR p_ou_count = 0) THEN

RETURN;

END IF;

IF (p_ou_count = 1) THEN

BEGIN

SELECT mg.organization_id,

mg.organization_name

INTO l_default_org_id,

l_default_ou_name

FROM mo_glob_org_access_tmp mg;

EXCEPTION

WHEN OTHERS THEN

l_default_org_id  := NULL;

l_default_ou_name := NULL;

END;

ELSE

l_prof_org_id := fnd_profile.value('DEFAULT_ORG_ID');

IF (mo_global.check_access(l_prof_org_id) = 'Y') THEN

l_default_org_id  := l_prof_org_id;

l_default_ou_name := mo_global.get_ou_name(l_default_org_id);

ELSE

l_default_org_id  := NULL;

l_default_ou_name := NULL;

END IF;

END IF;

p_default_org_id  := l_default_org_id;

p_default_ou_name := l_default_ou_name;

EXCEPTION

WHEN OTHERS THEN

generic_error('MO_UTILS.Get_Default_OU',

SQLCODE,

SQLERRM);

END get_default_ou;

 

 

ORACLE R12 MOAC的更多相关文章

  1. 转:Oracle R12 多组织访问的控制 - MOAC(Multi-Org Access Control)

    什么是MOAC MOAC(Multi-Org Access Control)为多组织访问控制,是Oracle EBS R12的重要新功能,它可以实现在一个Responsibility下对多个Opera ...

  2. Oracle R12 多组织访问的控制 - MOAC(Multi-Org Access Control)

    什么是MOAC MOAC(Multi-Org Access Control)为多组织访问控制,是Oracle EBS R12的重要新功能,它可以实现在一个Responsibility下对多个Opera ...

  3. EBS R12 MOAC原理探索 (转)

    转载地址 EBS R12 MOAC原理探索

  4. SYS_R12 MOAC多组织底层技术实现技术分析(Oracle VPD) (案例)

    2014-05-30 Created By BaoXinjian

  5. Oracle Apps DBA R12.2 Syllabus

    1. What is Oracle R12.2 R12.2 Definition Architecture Advantages of R12.2 Limitations of R12.2 What ...

  6. Oracle EBS 入门

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

  7. DBA_Oracle Erp R12中文补丁安装升级(案例)

    2014-07-11 Created By BaoXinjian

  8. PLSQL_R12 MOAC多组织的四个应用(案例)

    一.摘要 R12 Form 或者其他二次开发时,很多情况下会涉及R12 MOAC多组织开发,以下介绍了4个常见的应用,如有遗漏还请学友继续补充 1. 开发时打开Form自动弹出组织选择实现方式(增加C ...

  9. SYS_R12 MOAC多组织的四个应用(案例)

    2014-05-31 Created By BaoXinjian

随机推荐

  1. codevs 1088 神经网络

    bfs.语文题. #include<iostream> #include<cstdio> #include<cstring> #include<algorit ...

  2. Swift入门篇-swift简介

    潜水博客园很多年,闲来无事,聊一下自己的经历,语文不好(如有什么错别字,请您在下评论)望您谅解,没有上过什么学的 在前期 ios入门篇 -hello Word(1) 文章中介绍我这半年准备写一些ios ...

  3. poj 2773 Happy 2006

    // 题意 :给你两个数 m(10^6),k(10^8) 求第k个和m互质的数是什么这题主要需要知道这样的结论gcd(x,n)=1 <==> gcd(x+n,n)=1证明 假设 gcd(x ...

  4. Oracle 课程八之性能优化之10053事件

    一. 10053事件 当一个SQL出现性能问题的时候,可以使用SQL_TRACE 或者 10046事件来跟踪SQL. 通过生成的trace来了解SQL的执行过程. 我们在查看一条SQL的执行计划的时候 ...

  5. 一步一步ITextSharp 低级操作函数使用

    首先说一下PDF文档的结构: 分为四层,第一层和第四层由低级操作来进行操作,第二层.第三层由高级对象操作 第一层操作只能使用PdfWriter.DirectContent操作,第四层使用DirectC ...

  6. ios实现类似魔兽小地图功能 在

    写了一个类似魔兽小地图功能的控件. 比如你有一个可以放大缩小的scrollView.会在里面进行一些放大缩小,点击里面的按钮呀,等操作. 这个小地图控件.就会和你的大scrollView同步.并有缩略 ...

  7. POJ 1251 Jungle Roads

    题意:嗯……没看题……看了眼图……求个最小生成树. 解法:kruskal. 代码: #include<stdio.h> #include<iostream> #include& ...

  8. [Everyday Mathematics]20150131

    在 $\bbR^4$ 中定义如下有界区域 $\Omega$: $$\bex \Omega=\sed{(x,y,z,w)\in\bbR^4;\ |x|+|y|+\sqrt{z^2+w^2}\leq 1} ...

  9. 《C++ primer》--第12章

    习题12.7 什么是封装?为什么封装是有用的? 解答: 封装是一种将低层次的元素组合起来形成新的.高层次实体的技术.例如,函数是封装的一种形式:函数所执行的细节行为被封装在函数本身这个更大的实体中:类 ...

  10. 使用 CreateInstallMedia 创建 苹果系统安装U盘

    一般来说,从app store上面 下载下来的image位置,都是在 /Applications 下面 使用命令创建安装U盘,(备份一下命令,太长,记不住) sudo /Applications/In ...