ORA-06598 sur RQSYS.RQEVALIMPL

Lorsqu’on utilise ORE avec une instance 12c, certaines commandes échouent avec l’exception ORA-06598.

Exemple:

 
> ore.connect(user="c##rafa", password="Password1#", conn_string="//clorai2-scan:1521/pdb_hodba08")
> ore.doEval(function() {}, ore.connect = TRUE)
Error in .oci.GetQuery(conn, statement, data = data, prefetch = prefetch,  : 
  ORA-06598: insufficient INHERIT PRIVILEGES privilege
ORA-06512: at line 11
ORA-06512: at "RQSYS.RQEVALIMPL", line 5
ORA-06512: at line 6
> 

Je suis pourtant connecté avec un utilisateur (C##RAFA) disposant des droits requis:

 
SQL> select privilege from dba_sys_privs where grantee='C##RAFA';

PRIVILEGE
----------------------------------------
CREATE TABLE
CREATE VIEW
CREATE MINING MODEL
CREATE SESSION
CREATE PROCEDURE
UNLIMITED TABLESPACE

6 rows selected.

SQL> select granted_role from dba_role_privs where grantee='C##RAFA';

GRANTED_ROLE
--------------------------------------------------------------------------------
RQADMIN

SQL>

Le problème est en fait lié à une sécurisation additionnelle de la version 12c.
L’idée étant d’éviter que les programmes PLSQL définis comme utilisant les privilèges de l’appelant (AUTHID CURRENT_USER) ne puissent en profiter pour réaliser une élévation de privilèges à l’insu de l’appelant.

On peut effectivement vérifier que le type RQEVALIMPL est défini avec AUTHID CURRENT_USER:

 
SQL> SELECT DISTINCT authid
  2  FROM dba_procedures
  3  WHERE owner = 'RQSYS' AND object_name = 'RQEVALIMPL';

AUTHID
------------
CURRENT_USER

SQL>

Une solution consiste à autoriser RQSYS (via le privilège INHERIT PRIVILEGES) à utiliser les privilèges de l’appelant (C##RAFA dans mon cas):

 
SQL> grant inherit privileges on user C##RAFA to RQSYS;

Grant succeeded.

SQL>

L’exception disparaît alors:

 
> ore.doEval(function() {}, ore.connect = TRUE)
NULL
>

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *