ENG: | ORA-28002: the password will expire within XXX days |
В Oracle 11g при попытке соединения с БД появляется сообщение об ошибке:
ORA-28002: the password will expire within XXX days
Вот цитата из документации:
ORA-28002: the password will expire within string days
Cause: The user's account is about to about to expire and the password needs to be changed
Action: change the password or contact the DBA
Причина:
В версии Oracle 11g изменился профиль для пользователей по умолчанию (DEFAULT). В основном изменились параметры имеющие отношения к паролю. В Oracle 10g все они были равны UNLIMITED, в Oracle 11g они получили конкретные значения. Именно по этому периодически возникает ORA-28002.
©Bobrovsky Dmitry
PASSWORD_LIFE_TIME = 180
В течении PASSWORD_LIFE_TIME дней (180) пользователь может использовать текущий пароль.
PASSWORD_GRACE_TIME = 7
Когда период PASSWORD_LIFE_TIME (180 дней) заканчивается, пользователю дается еще PASSWORD_GRACE_TIME (7 дней) в течении которых он должен изменить пароль. Потом учетная запись блокируется.
©Bobrovsky Dmitry
FAILED_LOGIN_ATTEMPTS = 10
Столько неудачных попыток дается пользователю соединиться с БД прежде чем заблокировать учетную запись. (Неудача обычно бывает из-за неправильного пароля = Нажат CapsLock или неправильная раскладка клавиатуры или (для 11g) неправильный регистр пароля).
PASSWORD_LOCK_TIME = 1
После FAILED_LOGIN_ATTEMPTS (10) неудачных попыток, учетная запись будет заблокирована на PASSWORD_LOCK_TIME дней (на 1 день).
Чтобы посмотреть параметры профиля, выполните запрос
SELECT resource_name, resource_type, LIMIT FROM dba_profiles WHERE profile = 'DEFAULT';
Подробнее об изменении профиля читать — 11G DEFAULT Profile Changes [ID 454635.1]
Решения:
— Можно подчиниться параметрам безопасности. Тогда каждый пользователь каждые 180 дней должен менять пароль.
Dmitry Bobrovsky
— Можно изменить параметры профиля DEFAULT или создать свой профиль с параметрами удобными для вас и назначить его пользователям.
Dmitry Bobrovsky
— Что бы полностью отключить проверку длительности использования пароля, нужно установить параметр PASSWORD_LIFE_TIME в UNLIMITED. И обязательно изменить пароль! (можно изменить фиктивно, т.е. оставить тот же, но процедуру изменения пароля нужно провести).
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; ALTER USER XXX IDENTIFIED BY "xxx";
Чтобы изменить пароль сразу у множества пользователей можно использовать процедуру.
Значения параметр astatus возможно посмотреть так:
select * from sys.user_astatus_map;
STATUS# STATUS
0 OPEN
1 EXPIRED
2 EXPIRED(GRACE)
4 LOCKED(TIMED)
8 LOCKED
5 EXPIRED & LOCKED(TIMED)
6 EXPIRED(GRACE) & LOCKED(TIMED)
9 EXPIRED & LOCKED
10 EXPIRED(GRACE) & LOCKED
connect / as sysdba spool runme.sql set serveroutput on size 200000 declare stmt varchar2(200); v_old_hash user$.password%type; v_new_hash user$.spare4%type; v_hash varchar2(200); begin for user_rec in (select name, password, spare4 from user$ where type#=1 and astatus in(1,2)) loop v_old_hash := user_rec.password; v_new_hash := user_rec.spare4; if not ((v_old_hash is null) and (v_new_hash is null)) then if (v_new_hash is null) then if v_old_hash <> 'EXTERNAL' then v_hash := ''''||v_old_hash||''''; else goto end_loop; end if; end if; if (v_old_hash is null) then v_hash := ''''||v_new_hash||''''; end if; if ((v_old_hash is not null) and (v_new_hash is not null)) then v_hash := ''''||v_old_hash||';'||v_new_hash||''''; end if; stmt := 'alter user '||user_rec.name||' identified by values'||v_hash; end if; dbms_output.put_line(stmt||';'); <> null; end loop; end; / spool off
Запись ORA-28002: the password will expire within XXX days впервые появилась Dmitry Bobrovsky Blog