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
>