ORA-28002が発生するもまだログインはできます。メッセージの通り数日以内に期限切れが発生しログインができなくなってしまうので対策が必要です。対策として2つあります。
パスワードを更新する、もしくはパスワード権限を無期限にする方法です。今回は両方やってみます。
症状確認
[oracle@vm102 admin]$ sqlplus sooni/sooni@ORA19
SQL*Plus: Release 19.0.0.0.0 - Production on 日 10月 9 15:31:07 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-28002: パスワードは、7日以内に期限切れになります。
最終正常ログイン時間: 日 10月 09 2022 15:29:06 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL>
上記の通りエラーが発生するもログインする事は可能です。
現状確認SQL
select t.USERNAME,t.ACCOUNT_STATUS,t.CREATED ,t.PROFILE,t.EXPIRY_DATE,t.LOCK_DATE from dba_users t where t.USERNAME ='SOONI' ;
現状確認例
-- 現状確認
SQL> select t.USERNAME,t.ACCOUNT_STATUS,t.CREATED,t.PROFILE,t.EXPIRY_DATE
2 ,t.LOCK_DATE
3 from dba_users t where t.USERNAME ='SOONI'
4 ;
-- DEFAULTプロファイルを使っている事確認できます
USERNAME ACCOUNT_STATUS CREATED PROFILE EXPIRY_D LOCK_DAT
---------- -------------------- -------- ---------- -------- --------
SOONI EXPIRED(GRACE) 22-02-15 DEFAULT 22-10-16 <--期限が迫っている事確認できます
対策1:パスワード更新する
-- 当然パスワード変更をすると解決します
SQL> alter user "SOONI" IDENTIFIED BY "soonipass";
ユーザーが変更されました。
-- 再度dba_usersを確認してみます
SQL> select t.USERNAME,t.ACCOUNT_STATUS,t.CREATED
2 ,t.PROFILE,t.EXPIRY_DATE,t.LOCK_DATE
3 from dba_users t where t.USERNAME ='SOONI';
USERNAME ACCOUNT_STATUS CREATED PROFILE EXPIRY_D LOCK_DAT
---------- -------------------- -------- ---------- -------- --------
SOONI OPEN 22-02-15 DEFAULT 23-04-07 <-- 期限が更新されています
SQL>
対策2:パスワードの期限を無期限にする
今回のケースで言うとsooniユーザは「DEFAULT」プロファイルを使っていますので、このプロファイルに記載されているpassword_life_timeを無期限(unlimited)に更新してあげればよいのですが、これだと「DEFAULT」プロファイルを使っている他のユーザも同様に無期限になってしまいます。少し乱暴な気もするのでここでは、sooni用に新規にプロファイルを作成し対応する事とします。
プロファイルの作成
プロファイルにはいろんな項目ありますが、今回はPASSWORD_LIFE_TIMEのみを指定しています。省略したその他の項目はデフォルトが採用されます。
create profile sooni_profile limit PASSWORD_LIFE_TIME unlimited ;
プロファイルの作成と割当例
-- sooniユーザ専用プロファイルの作成
SQL> create profile sooni_profile limit
2 PASSWORD_LIFE_TIME unlimited
3 ;
プロファイルが作成されました。
-- 作成したプロファイルをsooniへ割り当てる
SQL> alter user sooni profile sooni_profile
2 ;
-- プロファイル一覧
-- 以下の通り省略したものはDEFAULTが採用されています
SQL> SELECT p.PROFILE,p.RESOURCE_NAME,p.RESOURCE_TYPE,p.LIMIT FROM DBA_PROFILES p where p.PROFILE='SOONI_PROFILE'
2 order by p.PROFILE
3 ;
PROFILE RESOURCE_NAME RESOURCE LIMIT
-------------------- -------------------------- -------- ----------
SOONI_PROFILE COMPOSITE_LIMIT KERNEL DEFAULT
SOONI_PROFILE SESSIONS_PER_USER KERNEL DEFAULT
SOONI_PROFILE CPU_PER_SESSION KERNEL DEFAULT
SOONI_PROFILE CPU_PER_CALL KERNEL DEFAULT
SOONI_PROFILE LOGICAL_READS_PER_SESSION KERNEL DEFAULT
SOONI_PROFILE LOGICAL_READS_PER_CALL KERNEL DEFAULT
SOONI_PROFILE IDLE_TIME KERNEL DEFAULT
SOONI_PROFILE CONNECT_TIME KERNEL DEFAULT
SOONI_PROFILE PRIVATE_SGA KERNEL DEFAULT
SOONI_PROFILE FAILED_LOGIN_ATTEMPTS PASSWORD DEFAULT
SOONI_PROFILE PASSWORD_LIFE_TIME PASSWORD UNLIMITED
SOONI_PROFILE PASSWORD_REUSE_TIME PASSWORD DEFAULT
SOONI_PROFILE PASSWORD_REUSE_MAX PASSWORD DEFAULT
SOONI_PROFILE PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT
SOONI_PROFILE PASSWORD_LOCK_TIME PASSWORD DEFAULT
SOONI_PROFILE PASSWORD_GRACE_TIME PASSWORD DEFAULT
SOONI_PROFILE INACTIVE_ACCOUNT_TIME PASSWORD DEFAULT
17行が選択されました。
SQL>
-- 変更内容を確認する
-- 以下は12cでの例の為、PASSWORD_LIFE_TIMEのUNLIMITEDだけでEXPIRY_DATEがクリアされ
-- 無期限になっていますが、19cでは次のパスワード更新を実施しないとEXPIRY_DATEがクリアされません
--
ユーザーが変更されました。
SQL> select t.USERNAME,t.ACCOUNT_STATUS,t.CREATED
2 ,t.PROFILE,t.EXPIRY_DATE,t.LOCK_DATE
3 from dba_users t where t.USERNAME ='SOONI'
4 ;
USERNAME ACCOUNT_STATUS CREATED PROFILE EXPIRY_D LOCK_DAT
---------- -------------------- -------- -------------- -------- --------
SOONI OPEN 22-02-15 SOONI_PROFILE <-- ここがクリアされている
SQL>
SQL*Plus用
set lin 200 set pages 100 COLUMN USERNAME FORMAT A10 COLUMN ACCOUNT_STATUS FORMAT A8 COLUMN PROFILE FORMAT A20 COLUMN RESOURCE_NAME FORMAT A26 COLUMN RESOURCE_TYPE FORMAT A8 COLUMN LIMIT FORMAT A10