Recuperar senha de usuário (11g)

Nada de mais aqui, é que tive que utilizar este script recentemente (MOS Doc ID 1051962.101) para executar um “ALTER USER user ACCOUNT UNLOCK IDENTIFIED BY…”, pois um usuário de uma aplicação teve uma senha expirada, e resolvi deixar a identação do script como eu gosto 🙂

set serveroutput on
set lines 200

declare
	stmt varchar2(200);
	v_old_hash user$.password%type;
	v_new_hash user$.spare4%type;
	v_hash varchar2(200);
begin
	for user_rec in (select name, password, spare4 from user$ where type#=1) loop
		v_old_hash := user_rec.password;
		v_new_hash := user_rec.spare4;

		if not ((v_old_hash is null) and (v_new_hash is null)) then
			if (v_new_hash is null) then
				if v_old_hash <> 'EXTERNAL' then
					v_hash := ''''||v_old_hash||'''';
				else
					goto end_loop;
				end if;
			end if;

			if (v_old_hash is null) then
				v_hash := ''''||v_new_hash||'''';
			end if;

			if ((v_old_hash is not null) and (v_new_hash is not null)) then
				v_hash := ''''||v_old_hash||';'||v_new_hash||'''';
			end if;

		stmt := 'alter user '||user_rec.name||' identified by values '|| v_hash;
		end if;

		dbms_output.put_line(stmt||';');
		<>
		null;
		end loop;
	end;
/

2 comments

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.