LoginSignup
3
0

More than 3 years have passed since last update.

[Oracle Cloud] OCI DBCS ORA-28001 パスワード有効期限切れが起きたときに解除する方法

Last updated at Posted at 2020-02-29

はじめに

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 への接続が出来るようになります。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0