RE: Help with ORA-01039

  • From: "Bobak, Mark" <Mark.Bobak@xxxxxxxxxxxx>
  • To: "cboyle@xxxxxxxxxxxxxxxxxxxxxx" <cboyle@xxxxxxxxxxxxxxxxxxxxxx>, "debaditya.chatterjee@xxxxxxxxx" <debaditya.chatterjee@xxxxxxxxx>, "oracle-l@xxxxxxxxxxxxx" <oracle-l@xxxxxxxxxxxxx>
  • Date: Thu, 29 Oct 2009 16:53:54 -0400

Actually, I think he'd want definers rights, In this case, and, since definers 
rights is the default, I don't think that's the issue.

The problem is, when you call from anonymous PL/SQL block, you're able to 
execute by virtue of privileges granted through roles.  When you execute from 
named procedure, all roles are disabled, and the explain plan fails.  The 
solution is to make sure that the owner of the procedure has the appropriate 
privileges granted directly, and not through a role.

-Mark

From: oracle-l-bounce@xxxxxxxxxxxxx [mailto:oracle-l-bounce@xxxxxxxxxxxxx] On 
Behalf Of Christopher Boyle
Sent: Thursday, October 29, 2009 4:35 PM
To: debaditya.chatterjee@xxxxxxxxx; oracle-l@xxxxxxxxxxxxx
Subject: RE: Help with ORA-01039

I think that you might be after Invokers Rights vs Definers rights.

http://download.oracle.com/docs/cd/E11882_01/appdev.112/e10472/subprograms.htm#LNPLS00809

but I haven't tested it quite like that yet.


From: oracle-l-bounce@xxxxxxxxxxxxx [mailto:oracle-l-bounce@xxxxxxxxxxxxx] On 
Behalf Of Debaditya Chatterjee
Sent: Thursday, October 29, 2009 4:14 PM
To: oracle-l@xxxxxxxxxxxxx
Subject: Help with ORA-01039


All,

I have a setup where some users query a set of tables owned by another user 
using views. As they do not have access to the base tables they cannot do an 
explain of their queries. I was hoping to create a procedure that does the 
explain plan through another user (IT_PERF which has select any table 
privilege) and grant execute on that procedure to these users.  However I am 
running into a problem as described below


As you can see below the anonymous block executes the explain plan without any 
issues but when I put the code in a procedure it fails with ORA-01039.  What is 
so special about the procedure that it runs into the error ?  Any known tricks 
to workaround this issue ?

Appreciate your response.

Thanks
Deba


SQL> begin
  2  execute immediate 'explain plan set statement_id = 
'||''''||'test1'||''''||' for select * from USER1.SOME_VIEW';
  3  end;
  4  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:02.65
SQL> create procedure test
  2  as
  3  begin
  4  execute immediate 'explain plan set statement_id = 
'||''''||'test1'||''''||' for select * from USER1.SOME_VIEW';
  5  end;
  6  /

Procedure created.

Elapsed: 00:00:00.55
SQL> exec test;
BEGIN test; END;

*
ERROR at line 1:
ORA-01039: insufficient privileges on underlying objects of the view
ORA-06512: at "IT_PERF.TEST", line 4
ORA-06512: at line 1

Other related posts: