16 сентября 2008 г.

Как узнать старый пароль дблинка (если он был изменен недавно)?

Как вы думаете, как можно узнать старый пароль дблинка (database link), который был изменен совсем недавно?
Один мой коллега (НЕ ДБА!) предложил суперский вариант, как это можно сделать: посмотреть флешбеком (flashback) состояние системной таблицы, в которой хранится информация о дблинках.
Смотрим, к каким системным таблицам обращается вьюшка dba_db_links:

create or replace view dba_db_links
(owner, db_link, username, host, created)
as
select u.name, l.name, l.userid, l.host, l.ctime
from sys.link$ l, sys.user$ u
where l.owner# = u.user#
Дальше, флешбеком смотрим состояние системной таблицы sys.link$ на час назад:
SQL> select name, userid, password
from sys.link$ as of timestamp(sysdate-1/24)
where name ='MYDBLINK';

NAME USERID PASSWORD
-------------------- ---------- ----------
MYDBLINK USERNAME OLDPASSWD
OLDPASSWD - это наш старый пароль. Чтоб убедиться, что мы нашли то, что нужно посмотрим текущий пароль:
SQL> select name, userid, password
from sys.link$ as of timestamp(sysdate)
where name ='KI_ICR002';

NAME USERID PASSWORD
-------------------- ---------- ----------
MYDBLINK USERNAME NEWPASSWD
Вот так вот нашли только что измененный пароль. А я уже хотела логмайнером (logminer) порыться в реду-логах (redo). Правда, описанный выше метод сработает только если изменения были сделаны совсем недавно, то есть в пределах undo_retention (не всегда гарантированно).

3 коммент.:

Алексей Шаляпин - это я. комментирует...

ага, а еще так можно восстанавливать исходный код пакетов и проч...

Unknown комментирует...

Ага, а в десятке нифига... password пусто, все в passwordx, но там хэши только.

Denis комментирует...

простите, а в чем потребность восстановления старого пароля?