Изменение характеристик пароля
Спецификация
<изменение характеристик пароля>::=
ALTER USER [имя пользователя]
PASSWORD {LENGTH {MIN длина пароля | UNLIMITED}
| LIFE {TIME количество дней | UNLIMITED}}
<длина пароля>::=
целое положительное число
<количество дней>::=
целое положительное число

Примечание

Все действия, связанные с измененнием параметров пароля и срока его действия, должны быть согласованы с пользователем, либо администратор БД должен уведомить пользователя о произведенных им изменениях.

Примечание

При задании настроек длины пароля пользователя следует учесть, что в версиях 6.0.20.1 и выше для баз данных по умолчанию включен режим CERTIFIED (см. документ «Создание и конфигурирование базы данных», подпункт «Создание БД»), который запрещает задание пароля пользователя длиной менее 8 символов.

Для баз данных, созданных с явно заданной опцией ORDINARY (см. документ «Создание и конфигурирование базы данных», подпункт «Создание БД») возможно задание пароля длиной от 0 символов.

Синтаксические правила
  1. Опция PASSWORD LENGTH UNLIMITED разрешает использовать пароль любой длины в диапазоне от 0 (т.е. без пароля) до 18.

    Примечание

    При нулевой длине пароля доступ пользователя к БД выполняется без аутентификации (см. пункт «Создание пользователя»).

  2. Опция PASSWORD LENGTH MIN устанавливает минимальную длину пароля пользователя (от 0 до 18).

    Изменение длины пароля пользователя, подавшего эту команду:
    alter user password length min 6;
  3. Текущую длину пароля пользователя команда опция PASSWORD LENGTH MIN не проверяет, она влияет только на выполнение последующих команд CREATE USER, ALTER USER или GRANT с ключевым словом IDENTIFIED.

  4. Опция PASSWORD LIFE TIME <количество дней> устанавливает длительность действия пароля. <Количество дней> задает время действия пароля (в днях) с момента выполнения данной команды.

    alter user user1 password life time 30;
  5. Значение <количество дней> должно быть в диапазоне от 0 до 65534.

  6. Длительность действия пароля проверяется только в процессе аутентификации пользователя. Это означает, что текущая сессия пользователя после истечения срока действия пароля прервана не будет и может продолжаться сколь угодно долго.

  7. Если обозначена опция PASSWORD LIFE TIME <количество дней>, то заданное значение прибавляется к текущей дате. Полученная дата ограничивает срок действия пароля. Попытка пользователя получить доступ к БД в текущем сеансе после истечения срока действия пароля будет заблокирована – на любую команду, кроме ALTER USER, пользователь будет получать код завершения 1022 («Нарушение привилегий»). После смены пароля по команде ALTER USER доступ пользователя к БД будет возобновлен вплоть до истечения следующего интервала времени действия пароля.

  8. Доступ пользователя к БД после окончания срока действия пароля может быть восстановлен в том случае, если администратор БД подаст команду на смену пароля пользователя при помощи оператора GRANT, например:

    grant dba to TEST identified by '12345678';

    или если администратор БД (SYSTEM) отменит ограничение на время действия пароля с помощью оператора

    alter user <имя пользователя> password life unlimited;
  9. Опция PASSWORD LIFE UNLIMITED отменяет ранее установленный срок действия пароля.

Пример
Выполняем блок запросов:
drop user TEST cascade;
create user TEST identified by '12345678';
grant dba to TEST;
alter user TEST password life time 1;
username TEST/12345678
! таблица может быть создана
create or replace table test(i int);

Затем средствами ОС переводим системное время на сутки вперед и выполняем блок запросов, в котором первый оператор create table должен быть заблокирован (код завершения 1022 «Нарушение привилегий»), а второй – отработать корректно:
! создать таблицу нельзя – истек срок действия пароля
username TEST/12345678
create or replace table test(i int);

username SYSTEM/MANAGER8
! дать пользователю TEST привилегию DBA и установить новый пароль
grant dba to TEST identified by '123456781';
username TEST/123456781
! таблица может быть создана
create or replace table test(i int);