su.sql changer l’utilisateur ou le compte propriétaire oracle

scripts et trucs pas de Commentaire »

Il est possible de faire l’équivallent d’un ‘su’ Unix, sous Oracle, pour changer l’utilisateur courant.

C’est très pratique et s’appuie sur une fonctionnalité peu documentée : le ALTER USER … IDENTIFIFIED BY VALUES.

Voici le script (je n’en suis pas l’auteur) :

set head off termout off
set verify off
col nl newline
spool /tmp/sud.tmp
column EXTERNE new_value NEXTERNE noprint
select decode (password,’EXTERNAL’,'oui’,'non’) EXTERNE
from dba_users where username=upper(‘&&1′)
/
select ‘alter user &&1 identified by &&1;’ nl,
‘grant alter user to &&1;’ nl
from dual
/
select
‘connect &&1/&&1.@’||rpad(global_name,5) nl,
‘alter user &&1 identified’||
decode(‘&NEXTERNE’,'oui’,’ EXTERNALLY;’,
‘ by values  »’||u.password|| »’;') nl
from sys.dba_users u, global_name
where u.username = upper(‘&&1′)
and u.username <> user
/
spool off
@/tmp/sud.tmp
set termout on
select ‘Connected as ‘||USER||’ on ‘||global_name||’.’
from global_name;
–!rm /tmp/su.tmp
set termout on head on

Seule petite particularité : quand le compte est en authentification externe ( IDENTIFIED EXTERNALLY) …ca marche aussi.