はじめに
Oracle 10gあたりから,Oracle database上のユーザアカウントに有効期限がつく様になっている.その設定内容を確認した上で,変更したり無期限に設定したり,ORA-28002エラーに対処する方法を説明する.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
ユーザのパスワード有効期限を確認
scottユーザの有効期限を確認する.
SQL> select username,expiry_date from dba_users where username = 'SCOTT';
USERNAME -------------------------------------------------------------------------------- EXPIRY_D -------- SCOTT 16-11-27
SQL>
パスワードを変更する
SQL> alter user scott identified by tiger;
ユーザーが変更されました。
SQL>
変更された後,再度有効期限を確認する.
SQL> select username,expiry_date from dba_users where username = 'SCOTT';
USERNAME -------------------------------------------------------------------------------- EXPIRY_D -------- SCOTT 16-12-05
SQL>
これが180日後なのか,確認してみる. まずは,今現在の日付を確認.
SQL> select sysdate from dual;
SYSDATE -------- 16-06-08
SQL>
今日から180日を計算してみる.
SQL> select sysdate + 180 from dual;
SYSDATE+ -------- 16-12-05
SQL>
180日後に変更されていることが確認できた.
デフォルトのパスワード有効期限を確認して変更する
パスワードの有効期限は,dba_profilesに登録されているので確認する.
SQL> select * from dba_profiles where resource_name = 'PASSWORD_LIFE_TIME';
PROFILE -------------------------------------------------------------------------------- RESOURCE_NAME -------------------------------------------------------------------------------- RESOURCE_TYPE ------------------------ LIMIT -------------------------------------------------------------------------------- DEFAULT PASSWORD_LIFE_TIME PASSWORD 180
SQL>
180日だと確認できた デフォルトのプロフィールのはず.これを1日に変更してみる.
SQL> alter profile default limit password_life_time 1;
プロファイルが変更されました。
SQL>
変更後,設定されたか確認する.
SQL> select * from dba_profiles where resource_name = 'PASSWORD_LIFE_TIME';
PROFILE -------------------------------------------------------------------------------- RESOURCE_NAME -------------------------------------------------------------------------------- RESOURCE_TYPE ------------------------ LIMIT -------------------------------------------------------------------------------- DEFAULT PASSWORD_LIFE_TIME PASSWORD 1
SQL>
設定変更されたことが確認できた.
プロフィールのexpiry_dateを変更したら即時反映されることを確認
先ほどの手順で,scottユーザのパスワードを変更したので180日後の16-12-05が期限になっていたが,その後プロフィールを変更した事でscottユーザのパスワード有効期限がどうなっているか確認する.
SQL> select username,expiry_date from dba_users where username = 'SCOTT';
USERNAME -------------------------------------------------------------------------------- EXPIRY_D -------- SCOTT 16-06-09
SQL>
16-06-09に変更されている. 現在日付を確認.
SQL> select sysdate from dual;
SYSDATE
16-06-08
SQL>
180日後だったものが,自動的に反映されて1日後になっていることが確認できる.
他のユーザへの影響を確認
パスワードのexpiry_dateを1に変更したが,それがどこまで影響があるか確認する. まずは,現在のユーザ.
SQL> column username for a15 SQL> select username,expiry_date from dba_users order by expiry_date;
USERNAME EXPIRY_D --------------- -------- DIP 16-05-23 ORACLE_OCM 16-05-23 DBSNMP 16-05-23 APPQOSSYS 16-05-23 XDB 16-05-23 XS$NULL 16-05-23 SYS 16-05-24 OUTLN 16-05-24 CTXSYS 16-05-24 ANONYMOUS 16-05-24 MDSYS 16-05-24
USERNAME EXPIRY_D --------------- -------- HR 16-05-24 SCOTT2 16-06-09 SCOTT 16-06-09 SYSTEM 16-06-15
15行が選択されました。
SQL>
先ほど変更したscottユーザが明日になっているのはわかるにしても,その他のユーザの多くが16-05-24となっている. 以前の180日に戻して,確認してみる.
SQL> alter profile default limit password_life_time 180;
プロファイルが変更されました。
SQL> select username,expiry_date from dba_users order by expiry_date;
USERNAME EXPIRY_D --------------- -------- DIP 16-05-23 ORACLE_OCM 16-05-23 DBSNMP 16-05-23 APPQOSSYS 16-05-23 XDB 16-05-23 XS$NULL 16-05-23 SYSTEM 16-06-15 SYS 16-11-19 OUTLN 16-11-19 CTXSYS 16-11-19 ANONYMOUS 16-11-19
USERNAME EXPIRY_D --------------- -------- MDSYS 16-11-19 HR 16-11-19 SCOTT2 16-12-05 SCOTT 16-12-05
15行が選択されました。
SQL>
パスワードの有効期限を無制限にする
プロフィールを変更してリミットを解除する.
SQL> alter profile default limit password_life_time unlimited;
プロファイルが変更されました。
SQL>
どの様に設定されたか確認する.
SQL> select * from dba_profiles where resource_name = 'PASSWORD_LIFE_TIME';
PROFILE -------------------------------------------------------------------------------- RESOURCE_NAME -------------------------------------------------------------------------------- RESOURCE_TYPE ------------------------ LIMIT -------------------------------------------------------------------------------- DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED
SQL>
数値じゃなくてUNLIMITEDが設定されている.
ORA-28002: the password will expire
systemユーザでログインしたら,この様なエラーが.
SQL> conn system/manager@192.168.20.28 ERROR: ORA-28002: the password will expire within 7 days
接続されました。 SQL>
パスワード有効期間を調べて見る.
SQL> select expiry_date from dba_users where username = 'SYSTEM';
EXPIRY_D -------- 16-06-15
SQL>
今日現在の日付に7を足してみる.
SQL> select sysdate + 7 from dual;
SYSDATE+ -------- 16-06-16
SQL>
expiry_dateに設定されている日付であっていることが確認できた.