Să ne imaginam următorul scenariu: schimbăm parola unui utilizator Oracle iar după ce am schimbat-o trebuie să o schimbam înapoi cu cea veche dar fără să știm care a fost parola veche, cum putem face acest lucru?
SQL> create user test identified by parolaveche; User created. SQL> grant create session to test; Grant succeeded. SQL> conn sys as sysdba Enter password: Connected.
Pentru a reseta parola vom avea nevoie să interogăm coloana spare4 din view-ul user$
SQL> select spare4 from user$ where name='TEST'; SPARE4 -------------------------------------------------------------------------------- S:899D2FE574666CE843331623A9B3B360B033EFC54AD74AA8958CD585FCB1
Verificăm că ne putem conecta cu utilizatorul test
SQL> conn test/parolaveche Connected.
Acum schimbăm temporar parola utilizatorului test
SQL> conn sys as sysdba Enter password: Connected. SQL> alter user test identified by parolanoua; User altered. SQL> conn test/parolaveche ERROR: ORA-01017: invalid username/password; logon denied Warning: You are no longer connected to ORACLE. SQL> conn sys as sysdba Enter password: Connected. SQL> alter user test identified by values 'S:899D2FE574666CE843331623A9B3B360B033EFC54AD74AA8958CD585FCB1'; User altered.
Verificăm că funcționează:
SQL> conn test/parolaveche Connected.
Pană la versiunea 11G hash-ul parolei era ținut în tabela dba_users. Pentru compatibilitate, utilizatorii cu care vine implicit instalat Oracle, hash-ul parolei este păstrat în ambele locații.
SQL> select USERNAME, PASSWORD_VERSIONS from dba_users where username in ('TEST','SYSTEM'); USERNAME PASSWORD ----------------------- -------- TEST 11G SYSTEM 10G 11G
Asta înseamnă că hash-ul parolei din dba_users este null pentru utilizatorul test iar pentru utilizatorul system acesta se găsește în coloana password din dba_users cat și în spare4 din user$