
Il arrive parfois qu'il soit nécessaire de se connecter à un autre utilisateur pour créer ou exécuter certaines tâches. Il s'agit notamment de créer des db_links, de configurer des tâches (jobs) ou d'exécuter une commande « package » avec le propriétaire de celle-ci.
Pour ce faire, on peut recourir à la création de ce que l'on appelle des «Proxy Users », qui permettent d'établir une connexion par l'intermédiaire proxy d'un utilisateur sans avoir besoin de connaître son mot de passe ni de le modifier.
Un exemple très courant est la création d'un compte db_link sans connaître le mot de passe de l'utilisateur. Il faut connaître le mot de passe d'un utilisateur ayant accès à la base de données et disposer des privilèges nécessaires.
Exemple de création d'DB_LINK.
Nous avons créé deux utilisateurs : user1 et user2.
SQL> CREATE USER USER1 IDENTIFIED BY password;
Utilisateur créé.
SQL> grant connect to user1;
Autorisation accordée.
SQL> grant create session, resource to user1;
Autorisation accordée.
SQL> alter user user1 default tablespace users;
Autorisation accordée.
SQL> alter user user1 quota unlimited on users;
Autorisation accordée.
SQL> CREATE USER USER2 IDENTIFIED BY password;
Utilisateur créé.
SQL> grant connect to user2 ;
Autorisation accordée.
SQL> grant create session, resource to user2 ;
Autorisation accordée.
SQL> alter user user2 default tablespace users ;
Autorisation accordée.
SQL> alter user user2 quota unlimited on users ;
Autorisation accordée.
Supposons que nous devions créer un lien de base de données en tant qu'utilisateur « user2 », mais que nous ne connaissions pas son mot de passe, alors que nous connaissons celui de l'utilisateur « user1 ».
En tant qu'utilisateur system nous accordons les autorisations nécessaires :
SQL> alter user user2 grant connect through user1;
Utilisateur modifié.
SQL> grant create database link to user2; Autorisation accordée.
Nous nous connectons avec l'utilisateur « user2 » en utilisant le mot de passe de l'utilisateur « user1 ».
SQL> connect user1[user2]/password@test;
Connexion établie.
SQL> show user
L'UTILISATEUR est «USER2»
SQL> create database link mi_dblinktest connect to user1 identified by password using //localhost:1521/test;
Lien de base de données créé.
sql> SELECT OWNER, DB_LINK, USERNAME, HOST FROM DBA_DB_LINKS

Il existe de nombreux cas où il peut être utile pour un administrateur de base de données (DBA) ou un développeur de pouvoir exécuter des tâches ou des procédures avec les droits du propriétaire de la tâche. Citons notamment la création d'index, le lancement de tâches, l'exécution et le débogage de paquets, etc.
Une fois les tâches terminées, il est important de révoquer le privilège accordé afin d'éviter tout problème de sécurité.
SQL> alter user user2 revoke connect through user1;
Utilisateur modifié.





