はじめに
Oracle Cloud Infrastructure(以下OCI)には、Oracle DB のマネージドサービスがいくつかあります。今までオンプレミスで使ってきた Oracle DB と同じような操作感で扱うことのできる Database Cloud Service では、Default でパスワードの有効期限が設定されています。この存在を知らないまま本番運用をしてしまうと、ある日いつのまにかパスワードの有効期限が切れて、Oracle DB へ接続できなくなります。・・・自分の検証環境で一度やらかしてしまいました。忘れないために記事を書きます。
有効期限が切れるとどうなるの?
ORA-28001: the password has expired
発生して、Oracle DB へ接続が失敗します。以下は、Go言語で出力されているログです。
Feb 29 17:06:19 runner-00001702e4c2 app_id=ocid1.fnapp.oc1.phx.aaaaaaaaagkp665ioxdui2ecjijcte6ij7c42fbajkh5idepo7tiwrfjnd2q,fn_id=ocid1.fnfunc.oc1.phx.aaaaaaaaaax6eejesdal35gjf6ognxlys2xbk3q2lkssmj3uhb3a6nofvyxq 2020-02-29T08:06:19.504Z ERROR serless_get-image-metadata/func.go:121 ORA-28001: the password has expired
パスワード変更とロック解除
SSH で oracle ユーザーへスイッチします
[opc@serverlessdemo ~]$ sudo su - oracle
Last login: Sat Feb 29 09:07:08 UTC 2020
[oracle@serverlessdemo ~]$
[oracle@serverlessdemo ~]$
SQL*Plus で接続します
[oracle@serverlessdemo ~]$ sqlplus / as sysdba
SQL*Plus: Release 18.0.0.0.0 - Production on Sat Feb 29 09:15:19 2020
Version 18.7.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
Connected to:
Oracle Database 18c Standard Edition 2 Release 18.0.0.0.0 - Production
Version 18.7.0.0.0
SQL>
自分の環境は、マルチテナント環境なので、該当のユーザーが存在する PDB に接続
alter session set container=sugi;
sugi user の PROFILE 確認します
select username,profile from dba_users where username = 'SUGI';
実行例
sugi ユーザーは、DEFAULT プロファイルを使用していることが分かります
SQL> select username,profile from dba_users where username = 'SUGI';
USERNAME
--------------------------------------------------------------------------------
PROFILE
--------------------------------------------------------------------------------
SUGI
DEFAULT
SQL>
DEFAULT PROFILE の詳細を確認します
select PROFILE,RESOURCE_NAME,RESOURCE_TYPE,LIMIT from dba_profiles where resource_name = 'PASSWORD_LIFE_TIME';
実行例
60
日となっています。構築したタイミング、バージョンにもよって日数は変わってくるかもしれません
SQL> select PROFILE,RESOURCE_NAME,RESOURCE_TYPE,LIMIT from dba_profiles where resource_name = 'PASSWORD_LIFE_TIME';
DEFAULT
,PASSWORD_LIFE_TIME ,PASSWORD,60
ロックされたユーザーの新パスワードを設定します
ALTER USER SUGI IDENTIFIED BY a7h#fa_JYbdiu976FafytoOuiybla;
実行例
SQL> ALTER USER SUGI IDENTIFIED BY a7h#fa_JYbdiu976FafytoOuiybla;
User altered.
SQL>
アカウントをアンロックします
ALTER USER SUGI ACCOUNT UNLOCK;
実行例
SQL> ALTER USER SUGI ACCOUNT UNLOCK;
User altered.
SQL>
Default Profile の有効期限を無期限に変更します
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
実行例
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
Profile altered.
SQL>
確認
SQL> select PROFILE,RESOURCE_NAME,RESOURCE_TYPE,LIMIT from dba_profiles where resource_name = 'PASSWORD_LIFE_TIME';
DEFAULT
,PASSWORD_LIFE_TIME ,PASSWORD,UNLIMITED
これで、Oracle DB への接続が出来るようになります。