Cours SQL ORACLE – 08 : GRANT et SYNONYM
- GRANT
Les GRANT est un ensemble de droit qu’on accorde à des objets d’un schéma (TABLE, PROCEDURE, FUNCTION etc…) vers un autre schéma.
Prenons l’exemple de schéma : SCHEMA1 et SCHEMA2. SCHEMA1 dispose des tables TAB1, TAB2 et TAB3. Nous avons besoin des données de ces tables dans une PROCEDURE du SCHEMA2. Nous pouvons utiliser ces donnés en donnant le droit de lecture de ces tables au SCHEMA2. Pour ce faire, nous utilisant l’instruction GRANT sur le SCHEMA1:
La structure d’un PACKAGE est comme suit:
GRANT SELECT ON TABLE TAB1 TO SCHEMA2;
GRANT SELECT ON TABLE TAB2 TO SCHEMA2;
GRANT SELECT ON TABLE TAB3 TO SCHEMA2;
Nous pouvons après utiliser les tables du schéma SCHEMA1 dans SCHEMA2 en ajoutant avant le nom de ces tables le nom du schéma SCHEMA1
SELECT * FROM SCHEMA1.TAB1;
Nous pouvons aussi donner le droit de MAJ (INSERT, DELETE et UPDATE) de ces tables au SCHEMA2:
GRANT SELECT, INSERT, DELETE ON TABLE TAB1 TO SCHEMA2;
GRANT SELECT, DELETE ON TABLE TAB2 TO SCHEMA2;
GRANT SELECT, UPDATE, DELETE, INSERT ON TABLE TAB3 TO SCHEMA2;
Dans ce cas de figure, SCHEMA2 a le droit de SELECT, INSERT et DELETE sur la table TAB1, a le droit de SELECT et DELETE sur la table TAB2 et a le droit de SELECT, UPDATE, DELETE et INSERT sur la table TAB3.
Avec le GRANT, nous pouvons donner le droit d’exécution d’une FUNCTION, PROCEDURE ou d’un PACKAGE à un autre schéma:
GRANT EXECUTE ON PROCEDURE PROC1 TO SCHEMA2;
GRANT EXECUTE ON FUNCTION FUNC1 TO SCHEMA2;
GRANT EXECUTE ON PACKAGE PKG1 TO SCHEMA2;
Comme pour le GRANT des tables, on peut faire appel à ces procédures stockées en ajoutant le nom du schéma avant le nom de la procédure:
EXEC SCHEMA1.PROC1;
PS: Les schémas SCHEMA1 et SCHEMA2 doivent être dans la même BD. Sinon on peut utiliser un autre objet qu’on appelle DBLink.
- SYNONYM
Les SYNONYM sont des noms alternatives aux noms des objets d’une BD ORACLE. On peut créer un SYNONYM pour le nom d’une table, d’une procédure, d’une vue etc…
L’utilisation des SYNONYM est inintéressante dans le cas de l’utilisation des GRANT. Cela permet de faire appel aux objets du schéma initial sans ajouter le nom de ce schéma.
Par exemple, on pourra appeler la table TAB1 du schéma SCHEMA1 dans SCHEMA2 sans ajouter SCHEMA1 avant le nom de la table. Pour ce faire, on execute la commande suivante dans le schéma SCHEMA2:
CREATE SYNONYM STAB1 FOR SCHEMA1.TAB1;
On pourra alors faire directement appel à notre table SCHEMA1.TAB1 dans SCHEMA2 par la requête:
SELECT * FROM STAB1; /* Le résultat obtenu sera le même que SELECT * FROM SCHEMA1.TAB1; */
De la même maniéré, on peut créer un SYNONYM aux procédures stockées du schéma SCHEMA1.
pour pouvoir créer un synonyme il faut que l’user schéma2 a le privilège create synonym et il a aussi les droits d’accès en maj sur la table tab1 du schema1
pour se faire :
l’admin doit donner le priv système : grant create synonym to schema 2
par la suite avoir les droits d’accès sur tab1 :
grant select, insert , update, delete on tab1 to schema2