Droits sur les procédures et packages (Sécurité Oracle)

Sécurité Oracle Ajouter un commentaire

Il existe 2 types gestion des droits des procédures (et fonctions et packages bien sûr)
Procédure avec Droits du propriétaire ou Procédure avec droits de celui qui lance la procédure.
Respectivement DEFINER’S RIGHT Procedure et INVOKER’S Right procedure.

Nous allons étudier dans cet article les DEFINER’s RIGHT .

Par défaut une procédure stockée s’exécute avec les droits du propriétaire, et non les droits de celui qui l’exécute !
Ceci implique que, par défaut l’exécuteur n’a pas besoin de droits particuliers sur les objets sous jacents, mais juste le droit d’exécuter la procédure !
Ces procédures ont la visibilité par défaut des objets du propriétaire, et pas de celui qui lance la procédure.
Et dernier point : LES ROLES NE SONT PAS SUPPORTéS !!!!

————————————————————-
1er cas simple :
une procédure (PDD) appartenant a DD, accede à une table de DD (TDD).
Cette procédure est utilisée par SCOTT.

SQL> connect DD
SQL> CREATE TABLE tdd (n integer);
SQL> create or replace PROCEDURE PDD AS
BEGIN
INSERT INTO tdd values (1);
END;
SQL> GRANT EXECUTE ON pdd TO scott;
SQL> connect SCOTT
SQL> CREATE SYNONYM pdd for dd.pdd
SQL> EXECUTE PDD
—> OK !!

rem : créer un synonyme pour la procédure est obligatoire ici (?!) car Oracle cherche l’objet
dans le shema courant..et il n’existe pas de DD.PDD dans SCOTT.
Le synonyme est lui traduit sans ambiguité.
- un EXECUTE DD.PDD donnerait:
erreur : ORA-06550: line 1, column 10:
PLS-00302: component ‘PDD’ must be declared

rem: il est à noter également que les objets accédés par la procédure sont implicitement
ceux du schéma propriétaire :
Bien que ce soit SCOTT qui appelle la procédure,
TDD référence un objet de DD
(sans avoir a le préfixer et même si SCOTT avait aussi une table qui s’appelle TDD !!!!)

————————————————————-
2eme cas simple :
une procédure (PDD) appartenant a DD, accede à une table de SCOTT (TSCOTT)

L’exécuteur n’étant pas le propriétaire de l’objet accédé il a donc besoin de droits explicites.

A) droit direct

SQL> connect SCOTT/TIGER
CREATE TABLE tscott (n INTEGER);
GRANT INSERT ON tscott to DD;

SQL> connect DD/DD
create or replace PROCEDURE PDD AS
BEGIN
INSERT INTO SCOTT.TSCOTT values (1);
END;

EXECUTE pdd –> OK !

B) via un role

SQL> REVOKE INSERT ON tscott FROM DD;
SQL> CREATE ROLE inscott;
SQL> GRANT INSERT ON scott.tscott TO inscott;

l’execution du package le rend invalide et sa recompilation nous donne plus de précisions :

SQL> CONNECT dd/dd
EXECUTE pdd

ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00905: object DD.PDD is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

SQL> ALTER PROCEDURE pdd COMPILE
Error
PL/SQL: SQL Statement ignored
PL/SQL: ORA-00942: table or view does not exist

CQFD les roles ne sont pas supportés.

Faire un commentaire