关于Oracle EBS R12 表格XLA_TRANSACTION_ENTITIES 的安全策略(VPD)组研究

2023-10-28 20:48

本文主要是介绍关于Oracle EBS R12 表格XLA_TRANSACTION_ENTITIES 的安全策略(VPD)组研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

安全策略VPD技术是啥这里就不多说了,网上很多资料,说明很清楚的。这里说的是另外一个比较困惑的点:

对于一个(OBJECT_OWNER.)对象,如果同时存在多个安全策略组的设定,如何确定什么时候抓哪一个安全策略组的设定(WHERE CONDITION)?

例如,查询安全策略:

---安全策略:
SELECT * 
 FROM dba_policies DBA
WHERE dba.object_name = 'XLA_TRANSACTION_ENTITIES'; 


可以看到有5种安全策略之多。

在Toad里面执行语句:SELECT COUNT(*) FROM XLA_TRANSACTION_ENTITIES;

这个语句究竟会用到哪种安全策略?怎么选择?

具体如何研究的就不详细介绍了,我这里直接说结论(都是以XLA_TRANSACTION_ENTITIES作为例子的)。对这方面有兴趣研究的朋友可以验证一下我的结论:

对于一个(用户.对象),如果同时存在多个安全策略组的设定,如何确定什么时候抓哪一个安全策略组的设定(WHERE CONDITION)?
1)其实是用上下文确定的。对应上下文设定查询的表格是:DBA_POLICY_CONTEXTS
特定的会话的上下文的值的查询:SYS_CONTEXT('XLA','SECURITY_GROUP')
根据上下文的值,就可以定位是用哪个安全性的组。

2)问题来了,如果没有定义上下文的值(就是SYS_CONTEXT('XLA','SECURITY_GROUP')为空)的情况下,如何知道用到哪个安全性的组?
通过测试得出,当安全性的上下文的组没有定义的话,它并不是用到哪个组,而是全部的组的限制条件都合并起来!
这点可以通过查询动态性能图:V$VPD_POLICY 得出结论。
当安全性的组的上下文留空的时候,对于同一个SQL和同一个子游标,V$VPD_POLICY 查询出来的是所有组的限制条件。

---结论:
以XLA_TRANSACTION_ENTITIES表为例子(貌似目前EBS就只有这个表格有多个安全性的策略。。。)
1)在客制化的报表等地方,如果确定要用到哪个安全性的策略,最好定位准确。
  定义的过程:XLA_CONTEXT_PKG.set_security_context('XLA');
2)如果没有定义的话,最好确认一下单条SQL,在执行的时候它会用到那些安全策略自动提供的限制条件。
 (如何确认?很简单,就直接在Toad里面执行,然后用V$VPD_POLICY 查询即可)
3)还要注意的一点是,毕竟在报表执行的SQL和在Toad执行的SQL的环境是不一样的,
  所以也可以用上下文查询的语句SYS_CONTEXT('XLA','SECURITY_GROUP')确定在报表执行的环境,它到底有没有限制安全性组。再做开发的决定!

---------------------相关查询语句部分:

---安全策略:
SELECT * 
 FROM dba_policies DBA
WHERE dba.object_name = 'XLA_TRANSACTION_ENTITIES'; 

--可以看到,上面对同一个对象,定义了好几种安全策略。什么时候用哪种?
SELECT * FROM DBA_POLICY_GROUPS

--其实是用上下文确定的;
SELECT * FROM DBA_POLICY_CONTEXTS

--这里查询上下文:
SELECT SYS_CONTEXT('XLA','SECURITY_GROUP') FROM DUAL

--查询上下文所定义的PKG:
SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME LIKE '%CONTEXT%' AND OBJECT_TYPE = 'PACKAGE'


XLA_CONTEXT_PKG

---设定上下文的值,做测试用:
BEGIN
XLA_CONTEXT_PKG.set_security_context('XLA');
END;

---根据安全策略的包和函数,找出对应的具体的应用的安全策略:
SELECT XLA_SECURITY_POLICY_PKG.MO_POLICY('APPS','XLA_TRANSACTION_ENTITIES') 
  FROM dual; 
  
SELECT XLA_SECURITY_POLICY_PKG.XLA_STANDARD_POLICY('XLA','XLA_TRANSACTION_ENTITIES') 
  FROM dual; 

--情况SQL共享池的信息,正式环境慎用!!!
--ALTER SYSTEM FLUSH SHARED_POOL;

---测试SQL:
SELECT COUNT(*)--SAMT5
 FROM XLA_TRANSACTION_ENTITIES WHERE ROWNUM <=10;
 
SELECT * FROM V$SQL WHERE SQL_TEXT LIKE 'SELECT COUNT(*)--SAMT5%'

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('bc1c50j0969an',0,'ALL IOSTATS LAST'));

---V$SQLAREA包含当前位于共享池中的SQL语句,以及当前的执行统计。
SELECT * FROM V$VPD_POLICY WHERE OBJECT_NAME = 'XLA_TRANSACTION_ENTITIES' AND SQL_ID = 'bc1c50j0969an'


这篇关于关于Oracle EBS R12 表格XLA_TRANSACTION_ENTITIES 的安全策略(VPD)组研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/295843

相关文章

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

Java利用poi实现word表格转excel

《Java利用poi实现word表格转excel》这篇文章主要为大家详细介绍了Java如何利用poi实现word表格转excel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、每行对象类需要针对不同的表格进行对应的创建。package org.example.wordToEx

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

使用EasyExcel实现简单的Excel表格解析操作

《使用EasyExcel实现简单的Excel表格解析操作》:本文主要介绍如何使用EasyExcel完成简单的表格解析操作,同时实现了大量数据情况下数据的分次批量入库,并记录每条数据入库的状态,感兴... 目录前言固定模板及表数据格式的解析实现Excel模板内容对应的实体类实现AnalysisEventLis

使用Python实现表格字段智能去重

《使用Python实现表格字段智能去重》在数据分析和处理过程中,数据清洗是一个至关重要的步骤,其中字段去重是一个常见且关键的任务,下面我们看看如何使用Python进行表格字段智能去重吧... 目录一、引言二、数据重复问题的常见场景与影响三、python在数据清洗中的优势四、基于Python的表格字段智能去重

Oracle登录时忘记用户名或密码该如何解决

《Oracle登录时忘记用户名或密码该如何解决》:本文主要介绍如何在Oracle12c中忘记用户名和密码时找回或重置用户账户信息,文中通过代码介绍的非常详细,对同样遇到这个问题的同学具有一定的参... 目录一、忘记账户:二、忘记密码:三、详细情况情况 1:1.1. 登录到数据库1.2. 查看当前用户信息1.

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行