Re: Re: Re: Explain Plan and Security

  • From: "l.flatz@xxxxxxxxxx" <l.flatz@xxxxxxxxxx>
  • To: jonathan@xxxxxxxxxxxxxxxxxx
  • Date: Tue, 19 Jun 2018 11:34:44 +0200 (CEST)

Agrered. I might need Stefans code at an other occaision. Did not know you can 
do this. 
For the cureent task it seems to be overkill.

Well, thanks for pointing out the fetch bit. I guess it does not hurt to do a 
fetch as long as nobody sees the result. :-)


----Ursprüngliche Nachricht----
Von : jonathan@xxxxxxxxxxxxxxxxxx
Datum : 19/06/2018 - 11:23 (GMT)
An : contact@xxxxxxxx, l.flatz@xxxxxxxxxx
Cc : oracle-l@xxxxxxxxxxxxx
Betreff : Re: Re: Explain Plan and Security


Fantastic bit of geekery from Stefan!.


Lothar, you may find that the underlying library bundles the open, execute and 
first fetch, so you may not get a plan until actually do the first fetch.

Regards
Jonathan Lewis

________________________________________
From: oracle-l-bounce@xxxxxxxxxxxxx <oracle-l-bounce@xxxxxxxxxxxxx> on behalf 
of l.flatz@xxxxxxxxxx <l.flatz@xxxxxxxxxx>
Sent: 19 June 2018 09:53
To: contact@xxxxxxxx
Cc: oracle-l@xxxxxxxxxxxxx
Subject: Re: Re: Explain Plan and Security

Hi Stefan,

thanks, thats interessting.
I am currently thinking of a much simpler solution though.
We could set up a runner job under the Apps User Authority,
The Job would receive a statement and bind variables, open the cursor but not 
fetch the data.
Sorry that this is so prosaic.

regards

Lothar

----Ursprüngliche Nachricht----
Von : contact@xxxxxxxx
Datum : 19/06/2018 - 10:19 (GMT)
An : oracle-l@xxxxxxxxxxxxx, l.flatz@xxxxxxxxxx
Betreff : Re: Explain Plan and Security

Hey Lothar,
today I had a little bit time to geek out and here is a working test case for 
what I've mentioned here 
(https://www.freelists.org/post/oracle-l/Re-Re-Explain-Plan-and-Security,1).

******************
-- Create test objects
create table t1 (a number);
create index t1_i on t1(a);
insert into t1 select rownum from dba_objects where rownum <= 10;
commit;
exec dbms_stats.gather_table_stats (USER,'T1');

-- Test SQL just for information
select * from t1;   --> SQL-ID: 27uhu2q2xuu7r

-- 11.2 solution
alter system flush shared_pool;
alter session set events 'sql_trace[SQL: 27uhu2q2xuu7r] {callstack: fname 
opifch2} {pgadep: exactdepth 0} plan_stat=never,wait=false,bind=false crash()';
select * from t1;
select * from table (DBMS_XPLAN.DISPLAY_CURSOR('27uhu2q2xuu7r',0,'ALL ALLSTATS 
OUTLINE PEEKED_BINDS LAST'));

-- 12.2 solution (as event filter "pgadep" in RDBMS library is not available 
anymore)
alter system flush shared_pool;
alter session set events 'sql_trace[SQL: 27uhu2q2xuu7r] {callstack: fname 
opifch}  plan_stat=never,wait=false,bind=false crash()';
select * from t1;
select * from table (DBMS_XPLAN.DISPLAY_CURSOR('27uhu2q2xuu7r',0,'ALL ALLSTATS 
OUTLINE PEEKED_BINDS LAST'));
******************


The process aborts with "ORA-03113: end-of-file on communication channel" right 
before/at fetching the data - so this should exactly fit your needs / security 
requirements :-)

Best Regards
Stefan Koehler

Independent Oracle performance consultant and researcher
Website: http://www.soocs.de
Twitter: @OracleSK
--
//www.freelists.org/webpage/oracle-l



--
//www.freelists.org/webpage/oracle-l


Other related posts: