多组织访问控制(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的设置为:
- 定义组织架构及OU信息
- 定义安全配置文件
- 运行”Security List Maintenance Program”请求
- 为用户职责分配”MO: Security Profile”预制文件的值为安全配置文件的定义
- 为用户职责设置一个默认的操作OU,分配”MO: Default Operating Unit”预制文件的值
- 如果还是希望一个职责对应一个单独的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