Skip to main content

Simuler "SU" sous sqlplus

Exemple pratique : un DBlink ne peut être créé/supprimé que par l'utilisateur propriétaire, même pas par SYS.
Si on a pas le mot de passe de l'utilisateur, on peut simuler un "SU" :

connecté SYS AS SYSDBA sous SQLPLUS :

Suppression d'un dblink DBL appartenant à USER1

declare
  uid number;
  sqltext varchar2(100) := 'DROP DATABASE LINK DBL';
  myint integer;
begin
  select user_id into uid from all_users where username like 'USER1';
  myint:=sys.dbms_sys_sql.open_cursor();
  sys.dbms_sys_sql.parse_as_user(myint,sqltext,dbms_sql.native,uid);
  sys.dbms_sys_sql.close_cursor(myint);
end ;
/
declare
  uid number;
  sqltext varchar2(100) := 'CREATE DATABASE LINK DBL CONNECT TO USERREMOTE IDENTIFIED BY PASSWORDREMOTE USING ''DBREMOTETNS''';
  myint integer;
begin
  select user_id into uid from all_users where username like 'USER1';
  myint:=sys.dbms_sys_sql.open_cursor();
  sys.dbms_sys_sql.parse_as_user(myint,sqltext,dbms_sql.native,uid);
  sys.dbms_sys_sql.close_cursor(myint);
end ;
/