Oracle synonymes
Comment créer des synonymes entre deux schémas a l'intérieur d'une base Oracle?
Introduction
Une base oracle est constitué de schémas. Ces schémas sont affectés a des utilisateurs. Un utilisateur a accès (selon les privilèges oracle) à ses propres objets.
Par exemple un utilisateur 'jean' peut avoir dans son schéma une table nommée 'test'. Si il se "loggue" en tant que 'jean' il accédera a cet objet facilement.
sqlplus jean/pwd@mabase
SQL*Plus: Release 10.2.0.2.0 - Production on Tue Mar 3 17:05:33 2009 Copyright (c) 1982, 2005, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Release 10.2.0.2.0 - 64bit Production
SQL> create table test (champ1 varchar(10), champ2 varchar(20));
SQL> insert into test values ('test','test');
1 row created.
SQL> select count(*) from test; COUNT(*) 1 SQL>
L'utilisateur 'jean' possède les drois de :
- création d'objet (create)
- modification (insert, update, delete)
- requête (select)
Un exemple d'utilisation des synonymes pourrait être de désirer d'un autre utilisateur (jean_ro) ait accès a la table 'test' de jean mais en lecture seule.
Mise en œuvre
Création de l'utilisateur
Connexion classique en tant que DBA
export ORACLE_SID=mabase sqlplus / as sysdba
Puis création de l'utilisateur avec seulement le droit de se connecter
create user jean_ro identified by mot_de_passe; grant connect to jean_ro;
Création du synonyme
Enfin la création du synonyme et l'ajout du droit 'select' pour jean_ro sur jean pour la table test :
create synonym jean_ro.test for jean.test; grant select on jean.test to jean_ro;
Test du nouveau synonyme
On se connecte en tant que 'jean_ro'
sqlplus jean_ro/mot_de_passe@mabase SQL*Plus: Release 10.2.0.2.0 - Production on Tue Mar 3 17:05:33 2009 Copyright (c) 1982, 2005, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Release 10.2.0.2.0 - 64bit Production
SQL> select count(*) from test; COUNT(*) 1 SQL>
Destruction d'un synonyme
Il faut savoir que le synonyme est un objet appartement a l'utilisateur 'jean_ro' (C'est logique mais pas évidant).
Donc la destruction d'un synonyme se faite de la façon suivante:
export ORACLE_SID=mabase sqlplus / as sysdba
drop synonym jean_ro.test;