DB Link içerisindeki kullanıcının şifresinin tespit edilmesi
Oracle veritabanları arasında iletişim sağlamak için oluşturulan DB Linklerdeki kullanıcıların zamanla şifrelerinin ne olduğu unutulabilmektedir. Bu kullanıcıların şifrelerinin açık hali tespit edilebilir. Şifrenin tespiti için aşağıdaki adımları uygulayabilirsiniz.
Bu adımlar , veritabanı versiyonu 11.2.0.2 ve öncesinde oluşturulan db linkler için geçerlidir. Sonraki versiyonlarda passwordx değeri 50 karakterden den fazla olduğunda şifre çözülememektedir.
DB linkin oluşturulduğu veritabanında aşağıdaki adımları uygulayın.
Öncelikle şifresinin şifreli hali 50 karakterli olan db linkerin ne olduğunu belirleyelim.
SQL> column name format a30 SQL> column userid format a30 SQL> select name, userid from sys.link$ where length(passwordx)=50; NAME USERID ------------------------------ ------------------------------ ORCL_LINK ORCL_LINK_USER
Sonrasında bu db link için kullanılan şifrenin , şifreli halini tespit edelim.
SQL> set lines 1000 SQL> column name format a30 SQL> column passwordx format a60 SQL> select name,passwordx from sys.link$ where name in ('ORCL_LINK'); NAME PASSWORDX ------------------------------ ------------------------------------------------------------ ORCL_LINK XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Tespit edilen şifrenin açık halini bulalım. Aşağıdaki prosedürü çalıştırdığımızda “Sifre : XXXXXXXXX” şeklindeki bölümde şifremizin açık hali yazacaktır.
SQL> SET SERVEROUTPUT ON SQL> DECLARE db_link_password VARCHAR2 (100); BEGIN db_link_password := 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; DBMS_OUTPUT.put_line ( 'Plain password: ' || UTL_RAW.cast_to_varchar2 ( DBMS_CRYPTO.decrypt (SUBSTR (db_link_password, 19), DBMS_CRYPTO.DES_CBC_PKCS5, SUBSTR (db_link_password, 3, 16)))); END; / Sifre : XXXXXXXXX PL/SQL procedure successfully completed. SQL>