Oracle synonymes

De knowledge
Aller à la navigation Aller à la recherche

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;