多组织访问控制(MOAC)

10.7–11.5.x版本,多组织架构实现了经营单位(OU)的数据安全性,在底层数据表中有一列ORG_ID来记录数据所属的经营单一,所有多OU的基表都是以”_ALL”结尾,对应经营单位屏蔽信息的视图创建在APPS数据库模式下。

多OU的视图通过职责上面设置的MO: Operating Unit预制文件的值来限制值的读取。预制文件的值在用户登录系统职责后通过FND来初始化,CLIENT_INFO这个功能函数来取得ORG_ID的值,这个值在一个连接会话中有效。这样一来一个职责只能访问一个经营单位的数据。

从Oracle Applications R12开始,使用了多组织访问控制(Multi-Org Access Control)功能,使用户在一个职责下存取一个或者多个经营单位(Operation Units)的数据。增加了用户操作的方便性和灵活性。MOAC是通过安全配置文件(Security Profile)来实现的,通过在HR模块中定义安全配置文件来包括层次结构的组织架构,然后使用MO: Security Profile 预制文件将安全性配置文件和职责关联起来,这样就实现了用户能够访问MO: Security Profile预制文件中所对应安全配置文件中的经营单位信息。而后台则是通过数据库中的VPD(Virtual Private Database)功能来替换CLIENT_INFO实现多OU存取数据的控制。

因此R12环境下多OU的设置为:

  1. 定义组织架构及OU信息
  2. 定义安全配置文件
  3. 运行”Security List Maintenance Program”请求
  4. 为用户职责分配”MO: Security Profile”预制文件的值为安全配置文件的定义
  5. 为用户职责设置一个默认的操作OU,分配”MO: Default Operating Unit”预制文件的值
  6. 如果还是希望一个职责对应一个单独的OU,设置职责层的”MO: Operating Unit”预制文件

MOAC对用户系统操作的影响

所有与多OU相关的业务窗口中,都添加了一个OU选择的值列表

MOAC对客户化开发的影响

VPD(Virtual Private Database)替换了CLIENT_INFO,因此以前的安全性访问初始化的方式已经不再适用,如R12前使用如下的代码:

begin
dbms_application_info.set_client_info(‘&org_id’);
end;
/
select * from po_headers
/

但是在R12种已经不适用,在12版的工作流数据库包开发中使用MO_GLOBAL来实现

而在表单和报表的客户化开发中,都需要通过安全配置文件来初始化安全访问。

为了和系统标准功能保持一致以及程序的扩展性,需要在多OU相关的界面设计中添加OU选择的值列表。

启用MOAC时,查不出数据,初始化MOAC

DECLARE     
l_moac_profile IN VARCHAR2;
BEGIN
    
    
SELECT fnd_profile.VALUE ('XLA_MO_SECURITY_PROFILE_LEVEL')
  INTO l_moac_profile
  FROM DUAL;

    IF l_moac_profile is not null then
        mo_global.init('AR');--初始化MOAC
    END IF;

END 
原文地址:https://www.cnblogs.com/toowang/p/2818312.html