2013年2月24日日曜日

Oracle パスワードが期限切れで接続できない

半年ほど前に導入したシステムから、以下のエラーが発生しました。

ORA-28001:パスワードが期限切れです

調べてみると、なんと Oracle は 11g になってからデフォルトで 180日になっているじゃないですか!「ORA-28001」で検索すればいくらでも情報はあるのですが、「Oracle導入時の注意点」ではちっとも見かけなかった情報でした。。。こういった勝手な仕様変更に腹が立つのは私だけでしょうか?

以下の方法で復旧しました。

1. DBサーバ上で sqlplus sys/<管理者パスワード> as sysdba で sqlplus を起動
2. 以下のコマンドを実行して該当アカウントを復旧
  SQL> alter profile default limit password_life_time unlimited;
  SQL> alter user <ユーザID> identified by <パスワード>;
  SQL> alter user <ユーザID> account unlock;

ちなみにトラブルとなったのは JBoss サーバでしたが、この対処のみで自然と復旧することができました。また、トラブルとなったユーザ以外にも、有効期限が切れている(または切れそうな)ユーザを、以下の SQL で調査しました。

SQL> select USERNAME, ACCOUNT_STATUS, LOCK_DATE, EXPIRY_DATE, PROFILE from dba_users;

ここで、必要なアカウントについて、ACCOUNT_STATUS が OPEN 以外(EXPIRED や EXPIRED & LOCKED 等)だと、アカウントが無効(もしくは無効になりかけ)ですし、EXPIRY_DATE が設定されていたら、将来無効になってしまいます。同様に、以下の対処で正常な状態にすることができます。

  SQL> alter user <ユーザID> identified by <パスワード>;
  SQL> alter user <ユーザID> account unlock;

ちなみにこの対処だと、今後の運用ではパスワード無期限が前提になりますが、そもそもデータベースサーバはそれでまったく問題はないと思います。むしろ有効期限切れにする意味が分からない。。。と思うのは私だけ?

0 コメント:

コメントを投稿