こんにちは😀
以前、11gと12cのユーザ作成という記事で、Oracle(オラクル) Databaseに関してちょっと触れさせていただきました。
今回は、そのOracleを使い続けてある日突然ユーザの有効期限エラーに引っかかったのでそれに関してまとめました。
「ORA-28001」エラーが発生
Solaris OSにOracle Database 12cをインストールして使っていたのですが、ある日・・・
「ORA-28001:ユーザのアカウントが期限切れです。パスワードを変更する必要があります。」
と、操作画面上でエラーが発生しました。
Databaseに直接つなぎにいっても同じエラーになったので、ユーザ期限が切れたのだと思います。
ただ、登録した複数のどのユーザで試しても同じ現象になります。
もともとDatabase 11gのデータをエクスポート・インポートで持ってきていますが、11gの方ではそのような現象は起こっておらず。
データの中身が原因でなく、そもそもの設定が原因かもと調べてみました。
「ORA-28001」エラーの原因
調べたらすぐにわかりました。
Oracle Databaseは、バージョン11gよりデフォルトでユーザの有効期限が決まっているとのことです。
公式サイトの12cのパスワードポリシーを見ると以下のようになっています。
ユーザー・アカウントのパスワードは180日で自動的に期限切れとなります。
パスワードの期限切れの7日後にユーザー・アカウントがロックされます。
10回ログインに失敗すると、ユーザー・アカウントが1日ロックされます。
一番上のポリシーに引っかかったようです。
まだ期限が切れて7日はたっていないので、ロックはかかっていません。
11gが有効期限切れになっていなかったのは無期限の設定がされていたからでした。(こちらを作ったのは自分ではないので・・・。)
12cをインストールした時に、ユーザ有効期限を調整する設定をしていないため、デフォルトの有効期限180日が適用されたのでしょう。
有効期限の設定を変える方法
有効期限の設定を変えるには、以下のSQLコマンドを打ちます。
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
「UNLIMITTED」を打つことで無期限になります。
ただ有効期限はすでに切れているので、これだけではログインできません。
パスワードを変更する必要がるので以下のコマンドを打ちました。
ALTER ユーザ名 SYSTEM IDENTIFIED BY パスワード;
これで正常にログインができました。
今回の一言・・・
調べれば簡単にわかりましたが、知らないでエラーが出ると戸惑いますね。
これはバージョンアップによるセキュリティレベルを上げるための結果の仕様追加のようです。
ここまで読んでくれてありがとう。
では、また次回。
コメント
ALTER ユーザ名 SYSTEM IDENTIFIED BY パスワード;
じゃなくて
ALTER USER ユーザ名 IDENTIFIED BY パスワード;