每年會計師到廠來做資訊稽核,都會問有沒有定期更改系統的密碼,而且為了系統的安全,定期變更密碼是必要的。
Oracle EBS的APPS是一個特別的帳號,所以變更它的密碼需要有一些特別注意的事項,而且不能用DB直接更改APPS,這樣會有問題,因為EBS除了APPS之外,還有一個APPLSYS,這兩個帳號需要匹配。
有一次我在執行定期變更密碼的時候,在更新APPS的密碼時出現了一些問題,導致整個ERP都當掉了,最後發現是自己搞烏龍,以為密碼改為A,實際上卻是改為B,不過差點就要倒回備份資料庫來取回相關資料。
有鑑於此,所以找到EBS的文件,有一篇提到變更APPS密碼的文件,參考文件後,我的做法如下:
#### 查詢APPS密碼的修改日期
登入DB並執行下列的SQL,查看修改日期(PTIMT)
SQL> select name, PTIME from sys.user$ where name='APPS';
#### 備份相關的Table
雖然APPS是DB的帳號,但是會影響到EBS的兩個表格:FND_USER、FND_ORACLE_USERID,為避免修改密碼時發生問題,請先備份。我之前就是一直以為只要變更DB的APPS就可以了,並沒有備份這兩個Table,差點就要倒回備份來取回這兩個Table的資料。
SQL> create table cusadmin.FND_USER_20230901 as select * from FND_USER;
SQL> create table cusadmin.FND_ORACLE_USERID_20230901 as select * from FND_ORACLE_USERID;
因為我比較保守,所以會檢查備份的Table與原本的Table筆數是否一樣
SQL> select count(1) from FND_USER;
SQL> select count(1) from FND_ORACLE_USERID;
SQL> select count(1) from cusadmin.FND_USER_20230901;
SQL> select count(1) from cusadmin.FND_ORACLE_USERID_20230901;
如發生問題,則可以還原至原Table,請注意要確認有把table備份,如無就必需從備份檔還原
SQL> delete from FND_USER;
SQL> delete from FND_ORACLE_USERID;
SQL> INSERT INTO FND_USER SELECT * FROM cusadmin.FND_USER_20230901
SQL> INSERT INTO FND_ORACLE_USERID SELECT * FROM cusadmin.FND_ORACLE_USERID_20230901
#### 變更密碼
登入EBS AP Tier,用EBS的指令來變更密碼
FNDCPASS apps/<OLD_PASSWORD> 0 Y system/<PASSWORD> SYSTEM APPLSYS <NEW_PASSWORD>
例如:FNDCPASS apps/11111 0 Y system/22222 SYSTEM APPLSYS 33333
變更完成後請在當前的目錄先確認log檔有無問題,有問題才會產生log檔
改完密碼後可以到DB去測試看看,我有發生過用FNDCPASS指令,但是沒成功,結果新密碼無法啟動AP Tier,把自己嚇出一身冷汗
SQL> connect apps/xxxx
SQL> connect applsys/xxxx
FNDCPASS不僅會更改DB上的密碼,還會修改FND_USER、FND_ORACLE_USERID這兩個表格的值,所以如果直接由DB修改apps的密碼,會因密碼與Table的值不同,在log中會有解密錯誤的訊息,如下:
FNDCPASS was not able to decrypt password for user 'A1000' during applsys password change.
如果因密碼改錯導致AP有問題時,請先以舊密碼將AP關掉,再執行AP Tier的autoconfig,所以最好先關閉AP再來變更密碼
#### 關於另一個帳號applsyspub
這個帳號(applsyspub)的密碼不要亂改,改了之後還要修改相關的xml,及重新執行adautocfg.sh,如無把握,記得不要亂改。