Перестало работать приложение, использующее СУБД Oracle XE, в логе сообщение об истечении срока действия пароля: ORA-28001: the password has expired. При чем, было неизвестно под каким пользователем коннектится приложение. Но ясно, что искать надо просроченные пароли.
Приконнектиться к базе как супер админ:
conn / as sysdba
Посмотреть пользователей с истекшими паролями:
SQL> SELECT USERNAME,ACCOUNT_STATUS FROM dba_users WHERE ACCOUNT_STATUS LIKE '%EXPIRED%';
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
DIP EXPIRED > LOCKED
ORACLE_OCM EXPIRED > LOCKED
DBSNMP EXPIRED > LOCKED
APPQOSSYS EXPIRED > LOCKED
ORAUSER EXPIRED > LOCKED
Стало ясно, что искомый пользователь ORAUSER. Теперь надо его разлочить и сменить\переназначить пароль:
SQL> ALTER USER orauser ACCOUNT UNLOCK;
User altered.
SQL> ALTER USER orauser IDENTIFIED BY newpass;
User altered.
Проверить статус и дополнительно посмотреть дату истечения пароля:
SQL> SELECT USERNAME,ACCOUNT_STATUS,EXPIRY_DATE FROM dba_users WHERE USERNAME LIKE '%ORAUSER%';
USERNAME ACCOUNT_STATUS EXPIRY_DA
------------------------------ -------------------------------- ---------
ORAUSER OPEN 03-JAN-15
Видно, что учетка работает, но 3 января срок действия пароля снова истечет. Чтобы этого не происходило надо отключить данную возможность. Для этого надо узнать к какому профилю относится пользователь и отключить истечение времени действия пароля для этого профиля:
SQL> SELECT USERNAME,PROFILE from dba_users WHERE USERNAME LIKE '%ORAUSER%';
USERNAME PROFILE
------------------------------ ------------------------------
ORAUSER ORAPROFILE
SQL> ALTER PROFILE oraprofile LIMIT PASSWORD_LIFE_TIME UNLIMITED;
Profile altered.
Убедиться что все сработало. Поле EXPIRY_DATE должно быть пустым:
SQL> SELECT USERNAME,ACCOUNT_STATUS,EXPIRY_DATE FROM dba_users WHERE USERNAME LIKE '%ORAUSER%';
USERNAME ACCOUNT_STATUS EXPIRY_DA
------------------------------ -------------------------------- ---------
ORAUSER OPEN