Oracle password expired как убрать и продлить пароль

Oracle password expired как убрать

Oracle password expired как убрать

Сообщение ORA-28001: the password has expired возникает в Oracle Database при попытке подключения пользователя, у которого истёк срок действия пароля, заданный параметром PASSWORD_LIFE_TIME профиля. По умолчанию этот параметр часто установлен в значение 180 дней, из-за чего проблема регулярно появляется в сервисных аккаунтах, интеграциях, джобах DBMS_SCHEDULER и приложениях без интерактивного входа.

Ошибка блокирует подключение полностью: пользователь не может выполнить ни один SQL-запрос, пока пароль не будет изменён или срок действия не будет продлён. При этом смена пароля через клиент невозможна без прав администратора, а автоматические процессы продолжают падать с ошибками аутентификации. В таких случаях важно точно понимать, к какому профилю привязан пользователь и какие ограничения в нём заданы.

Продление пароля в Oracle решается на уровне профиля или конкретного пользователя. Используются команды ALTER USER и ALTER PROFILE, позволяющие либо задать новый пароль, либо изменить срок его действия, либо полностью отключить механизм истечения. Неправильная настройка может привести к повторному появлению ошибки или нарушению требований безопасности.

В статье разобраны практические шаги: как определить причину истечения пароля, проверить параметры профиля, продлить срок действия без смены пароля и убрать ограничение для системных и прикладных учётных записей. Все действия выполняются стандартными SQL-командами и применимы для Oracle Database 11g, 12c, 18c, 19c и выше.

Oracle password expired: как убрать и продлить пароль

Oracle password expired: как убрать и продлить пароль

При использовании подключения через SQL*Plus или драйверы OCI истёкший пароль может блокировать вход без возможности интерактивной смены. Это характерно для технических пользователей, у которых отсутствует доступ к клиенту с поддержкой смены пароля при логине.

В такой ситуации администратор должен выполнить продление вручную. Если политика безопасности допускает сохранение текущего значения, сначала проверяется статус и дата окончания:

sqlCopy codeSELECT username, account_status, expiry_date

FROM dba_users

WHERE username = ‘USER_NAME’;

Если профиль уже скорректирован, но пользователь остаётся в состоянии EXPIRED, требуется явное обновление пароля. Oracle не снимает флаг автоматически при изменении параметров профиля:

sqlCopy codeALTER USER

Причины появления ошибки ORA-28001 и ORA-28002

Причины появления ошибки ORA-28001 и ORA-28002

Ключевая причина – параметр PASSWORD_LIFE_TIME, определяющий максимальный срок действия пароля в днях. После его истечения Oracle автоматически меняет состояние учётной записи, даже если пароль корректен и пользователь активен.

Ошибка Причина Состояние аккаунта
ORA-28002 Срок действия пароля подходит к концу, активен период предупреждения EXPIRED(GRACE)
ORA-28001 Срок действия пароля полностью истёк EXPIRED

Ошибка ORA-28002 появляется, если задан параметр PASSWORD_GRACE_TIME. В этот период пользователь ещё может подключаться, но база возвращает предупреждение при каждом входе. Многие приложения воспринимают его как критическую ошибку и прекращают работу.

ORA-28001 возникает после завершения grace-периода. В этом состоянии Oracle полностью запрещает подключение, включая фоновые задания и внешние интеграции. Изменение профиля после наступления этого статуса не восстанавливает доступ автоматически.

Дополнительными факторами могут быть наследование ограничений от профиля DEFAULT, использование единого профиля для интерактивных и сервисных аккаунтов, а также автоматическое создание пользователей с включённой политикой истечения пароля.

Для предотвращения появления этих ошибок необходимо заранее контролировать параметры профилей и дату EXPIRY_DATE в DBA_USERS, особенно для учётных записей, используемых в приложениях и планировщике заданий.

Проверка текущих параметров профиля пользователя Oracle

Перед изменением срока действия пароля необходимо точно определить, какие ограничения применяются к пользователю. Все параметры безопасности в Oracle задаются через профиль, а не на уровне самой учётной записи, поэтому проверка начинается с определения привязанного профиля.

Информация о профиле и текущем статусе пользователя хранится в системном представлении DBA_USERS. Оно позволяет сразу увидеть состояние аккаунта и дату истечения пароля:

sqlCopy codeSELECT username, profile, account_status, expiry_date

FROM dba_users

WHERE username = ‘USER_NAME’;

После определения профиля анализируются его параметры. Ключевые значения, влияющие на ошибку password expired, находятся в представлении DBA_PROFILES. В первую очередь проверяется срок действия пароля:

sqlCopy codeSELECT resource_name, limit

FROM dba_profiles

WHERE profile = ‘PROFILE_NAME’

AND resource_name = ‘PASSWORD_LIFE_TIME’;

Если параметр установлен в числовое значение, пароль истекает автоматически через заданное количество дней. Значение UNLIMITED означает отсутствие ограничения и исключает появление ORA-28001.

Дополнительно рекомендуется проверить период предупреждений и ограничения повторного использования. Эти параметры влияют на поведение аккаунта до и после истечения срока:

sqlCopy code

Определение срока действия пароля для конкретного аккаунта

Чтобы понять, когда именно пользователь Oracle потеряет возможность подключения, необходимо определить фактическую дату истечения пароля. Эта информация хранится на уровне учётной записи и рассчитывается на основе параметров профиля и момента последней смены пароля.

Основной источник данных – представление DBA_USERS. Поле EXPIRY_DATE содержит конечную дату, после которой аккаунт перейдёт в состояние EXPIRED:

sqlSELECT username, account_status, expiry_date

FROM dba_users

WHERE username = ‘USER_NAME’;

При анализе результата следует учитывать следующие моменты:

  • значение NULL в поле EXPIRY_DATE означает отсутствие ограничения по сроку действия;
  • статус EXPIRED(GRACE) указывает на активный период предупреждений;
  • статус EXPIRED означает полный запрет на подключение независимо от профиля;
  • изменение параметров профиля не обновляет дату автоматически для уже истёкших паролей.

Для прогнозирования даты истечения важно учитывать дату последнего изменения пароля. Она напрямую влияет на расчёт срока:

sqlCopy codeSELECT username, password_change_date

FROM dba_users

WHERE username = ‘USER_NAME’;

При необходимости можно сопоставить эту дату с параметром PASSWORD_LIFE_TIME профиля и вручную рассчитать момент блокировки:

  1. определить профиль пользователя;
  2. проверить значение PASSWORD_LIFE_TIME в днях;
  3. добавить это значение к PASSWORD_CHANGE_DATE;
  4. сравнить результат с текущей датой сервера.

Такой подход позволяет заранее выявить аккаунты с приближающимся истечением пароля и продлить срок до появления ошибок ORA-28001 и ORA-28002.

Продление срока действия пароля через ALTER PROFILE

Продление срока действия пароля через ALTER PROFILE

Продление срока действия пароля в Oracle на практике выполняется через изменение параметров профиля, к которому привязан пользователь. Команда ALTER PROFILE влияет не на один аккаунт, а на все учётные записи, использующие данный профиль, поэтому перед применением важно понимать область действия.

Ключевым параметром является PASSWORD_LIFE_TIME. Он задаёт максимальное количество дней с момента последней смены пароля до его истечения. Если значение задано числом, Oracle автоматически пересчитывает дату окончания для новых смен паролей.

Для продления срока без полного отключения политики безопасности используется увеличение лимита. Например, установка значения 540 дней позволяет существенно отложить истечение без снятия контроля:

sqlCopy codeALTER PROFILE PROFILE_NAME

LIMIT PASSWORD_LIFE_TIME 540;

Если пароль используется в интеграциях, планировщике заданий или внешних сервисах, более надёжным решением становится отключение срока действия. Значение UNLIMITED полностью убирает расчёт даты истечения:

sqlCopy codeALTER PROFILE PROFILE_NAME

LIMIT PASSWORD_LIFE_TIME UNLIMITED;

Важно учитывать, что команда ALTER PROFILE не изменяет статус пользователей с уже истёкшим паролем. Если аккаунт находится в состоянии EXPIRED или EXPIRED(GRACE), потребуется дополнительный сброс пароля через ALTER USER.

После изменения профиля рекомендуется проверить обновлённые параметры в DBA_PROFILES и убедиться, что новые значения применяются именно в том контейнере базы данных, где создан пользователь, особенно в окружениях с CDB и PDB.

Сброс истёкшего пароля командой ALTER USER

Сброс истёкшего пароля командой ALTER USER

При истечении срока действия пароля в Oracle пользователь теряет возможность подключаться к базе, получая ошибку ORA-28001. Самый прямой способ восстановить доступ – принудительно задать новый пароль через команду ALTER USER под учетной записью с привилегией ALTER USER (обычно SYS или SYSTEM).

Базовый синтаксис команды выглядит следующим образом:

ALTER USER username IDENTIFIED BY new_password;

После выполнения этой команды пароль немедленно обновляется, а статус учетной записи автоматически меняется с EXPIRED на OPEN. Дополнительных действий для «продления» пароля не требуется, так как Oracle считает его вновь установленным.

Если используется профиль с ограничениями на повторное использование паролей (PASSWORD_REUSE_TIME, PASSWORD_REUSE_MAX), новый пароль должен отличаться от предыдущих, иначе операция завершится ошибкой ORA-28007. В этом случае необходимо задать действительно новый пароль, а не повторять старый.

Для сценариев, когда пароль менять нельзя (например, для сервисных пользователей), применяется повторная установка того же значения с временным снятием ограничений профиля либо его заменой. Однако стандартный и безопасный подход – явная смена пароля.

Типовые варианты сброса пароля в разных ситуациях:

Ситуация Команда
Истёкший пароль обычного пользователя ALTER USER app_user IDENTIFIED BY StrongPass_2025;
Заблокирован и пароль истёк ALTER USER app_user IDENTIFIED BY StrongPass_2025 ACCOUNT UNLOCK;
Смена пароля без разблокировки ALTER USER app_user IDENTIFIED BY NewSecurePwd;

После сброса рекомендуется сразу проверить статус учетной записи командой SELECT username, account_status FROM dba_users WHERE username='APP_USER';. Это позволяет убедиться, что пользователь не остался в состоянии EXPIRED(GRACE) или LOCKED.

Команда ALTER USER не влияет на срок действия пароля в будущем: новый отсчет начинается заново и полностью подчиняется параметру PASSWORD_LIFE_TIME профиля, назначенного пользователю.

Отключение политики истечения пароля для пользователя

Отключение политики истечения пароля для пользователя

В Oracle истечение пароля управляется не на уровне пользователя, а через профиль, назначенный учетной записи. Чтобы полностью убрать принудительное истечение пароля, необходимо изменить параметры профиля либо привязать пользователя к профилю без ограничений.

Для определения текущего профиля используется запрос:

SELECT username, profile FROM dba_users WHERE username='APP_USER';

Ключевой параметр – PASSWORD_LIFE_TIME. При значении UNLIMITED пароль не истекает независимо от срока использования. Проверка текущего значения выполняется так:

SELECT profile, resource_name, limit FROM dba_profiles WHERE resource_name='PASSWORD_LIFE_TIME' AND profile='APP_PROFILE';

Чтобы отключить истечение пароля для всех пользователей данного профиля, применяется команда:

ALTER PROFILE app_profile LIMIT PASSWORD_LIFE_TIME UNLIMITED;

Изменение вступает в силу сразу и распространяется на всех пользователей, которым назначен этот профиль. Уже истёкшие пароли при этом не активируются автоматически – требуется явный сброс пароля через ALTER USER.

Для точечного управления безопаснее создать отдельный профиль без политики истечения и назначить его конкретному пользователю:

CREATE PROFILE no_expire_profile LIMIT PASSWORD_LIFE_TIME UNLIMITED;

ALTER USER app_user PROFILE no_expire_profile;

Такой подход позволяет не ослаблять требования безопасности для остальных учетных записей.

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

Дополнительно следует проверить связанные параметры профиля, которые могут косвенно мешать стабильной работе сервисных пользователей:

  • PASSWORD_GRACE_TIME – период, в течение которого пользователь может входить после истечения пароля
  • PASSWORD_REUSE_TIME и PASSWORD_REUSE_MAX – ограничения на повторное использование паролей
  • FAILED_LOGIN_ATTEMPTS – автоматическая блокировка при ошибках аутентификации

Для сервисных и интеграционных учетных записей оптимально использовать отдельный профиль с PASSWORD_LIFE_TIME UNLIMITED и контролировать безопасность на уровне сетевого доступа и прав в базе, а не за счёт частой смены пароля.

Настройка PASSWORD_LIFE_TIME на уровне профиля

Параметр PASSWORD_LIFE_TIME определяет количество дней, в течение которых пароль считается действительным. По истечении этого срока Oracle переводит учетную запись в состояние EXPIRED или EXPIRED(GRACE) в зависимости от настроек профиля.

Для анализа текущих значений необходимо определить профиль и его параметры:

SELECT profile FROM dba_users WHERE username='APP_USER';

SELECT resource_name, limit FROM dba_profiles WHERE profile='APP_PROFILE' AND resource_name='PASSWORD_LIFE_TIME';

Изменение срока действия пароля выполняется командой ALTER PROFILE. Пример установки срока в 180 дней:

ALTER PROFILE app_profile LIMIT PASSWORD_LIFE_TIME 180;

Новое значение применяется немедленно ко всем пользователям профиля, но не сбрасывает уже истёкшие пароли. Для таких учетных записей требуется отдельный ALTER USER с установкой нового пароля.

Для продления пароля без его немедленной смены допустимо увеличить PASSWORD_LIFE_TIME до большего значения, чем текущее количество дней использования. Oracle пересчитывает срок автоматически от момента последней смены пароля.

Типовые варианты настройки PASSWORD_LIFE_TIME в зависимости от назначения учетной записи:

  • 30–90 дней – пользовательские учетные записи с интерактивным доступом
  • 180–365 дней – технические пользователи с контролируемым доступом
  • UNLIMITED – сервисные учетные записи без интерактивного входа

При использовании значения UNLIMITED рекомендуется компенсировать отсутствие истечения пароля другими ограничениями профиля и прав:

  • минимальный набор системных привилегий
  • ограничение по IP через сетевые ACL или firewall
  • жёсткие значения FAILED_LOGIN_ATTEMPTS

Изменение PASSWORD_LIFE_TIME в профиле DEFAULT влияет на всех пользователей без явно назначенного профиля. В продуктивных базах целесообразно создавать отдельные профили под разные классы учетных записей и избегать модификации DEFAULT.

Для контроля результата после изменения параметров рекомендуется проверить статус учетных записей:

SELECT username, account_status FROM dba_users WHERE profile='APP_PROFILE';

Проверка результата и повторный вход без ошибки password expired

Проверка результата и повторный вход без ошибки password expired

После изменения пароля или корректировки профиля необходимо убедиться, что учетная запись больше не находится в состоянии EXPIRED или EXPIRED(GRACE). Основной контроль выполняется через представление DBA_USERS.

SELECT username, account_status, expiry_date FROM dba_users WHERE username='APP_USER';

Корректным результатом считается статус OPEN и ненулевая дата EXPIRY_DATE, соответствующая новому значению PASSWORD_LIFE_TIME. Если статус остаётся EXPIRED, значит пароль не был пересоздан командой ALTER USER.

При наличии значения EXPIRED(GRACE) пользователь может подключаться только в рамках периода PASSWORD_GRACE_TIME. Такой режим временный и требует немедленной смены пароля, иначе доступ будет полностью заблокирован.

Для исключения скрытых блокировок следует дополнительно проверить признак LOCKED:

SELECT username, account_status FROM dba_users WHERE username='APP_USER';

Если статус содержит LOCKED, необходимо явно разблокировать учетную запись:

ALTER USER app_user ACCOUNT UNLOCK;

Повторный вход рекомендуется выполнять напрямую, минуя сторонние клиенты с сохранёнными учетными данными. Пример проверки через SQL*Plus:

sqlplus app_user@db_service

Успешное подключение без появления ORA-28001 подтверждает, что политика истечения пароля отработала корректно. Если ошибка повторяется, чаще всего причина связана с:

– подключением к другому сервису или экземпляру базы;

– использованием старого профиля из-за некорректного ALTER USER PROFILE;

– синхронизацией пароля в RAC или Data Guard.

В средах с RAC следует убедиться, что пароль обновлён во всех экземплярах, а в конфигурациях Data Guard – что изменения выполнены на первичной базе.

Финальным этапом контроля является повторная проверка даты истечения:

SELECT expiry_date FROM dba_users WHERE username='APP_USER';

Дата должна соответствовать ожидаемому сроку действия пароля либо быть NULL при использовании PASSWORD_LIFE_TIME UNLIMITED.

Вопрос-ответ:

Почему после ALTER USER пароль обновлён, а ошибка ORA-28001 всё равно появляется?

Чаще всего причина связана не с самим пользователем, а с профилем. Пароль был изменён, но PASSWORD_LIFE_TIME в профиле слишком мал, и срок снова истёк. Также ошибка возникает при подключении к другому сервису базы, где изменения не применялись, либо при наличии Data Guard, если пароль менялся не на первичной базе. Проверка account_status и expiry_date в DBA_USERS сразу показывает реальную причину.

Можно ли продлить срок действия пароля без его смены?

Да, это возможно за счёт изменения PASSWORD_LIFE_TIME в профиле на большее значение. Oracle пересчитывает дату истечения от момента последней смены пароля. Такой подход работает только если пароль ещё не перешёл в состояние EXPIRED. При уже истёкшем пароле потребуется явный ALTER USER с установкой нового значения.

Чем опасно изменение PASSWORD_LIFE_TIME в профиле DEFAULT?

Профиль DEFAULT применяется ко всем пользователям, у которых не задан профиль явно. Изменение этого профиля затрагивает системные учетные записи, схемы приложений и служебных пользователей. Это может привести к ослаблению требований безопасности или, наоборот, к массовому истечению паролей. На рабочих базах безопаснее создавать отдельные профили под конкретные задачи.

Как корректно настроить пользователей приложений, чтобы пароль не истекал?

Для таких учетных записей создаётся отдельный профиль с PASSWORD_LIFE_TIME UNLIMITED. Пользователь переводится на этот профиль через ALTER USER PROFILE. Дополнительно ограничиваются привилегии, сетевой доступ и число неудачных входов. Такой набор снижает риски без регулярной смены пароля.

Почему пользователь в статусе EXPIRED(GRACE) подключается, но приложение всё равно падает?

EXPIRED(GRACE) означает, что действует льготный период, в течение которого Oracle разрешает вход, но требует смены пароля. Большинство приложений не умеют обрабатывать запрос на смену пароля и получают ошибку при первом же подключении. Решение одно — сменить пароль вручную или убрать истечение через профиль до запуска приложения.

Почему после увеличения PASSWORD_LIFE_TIME пользователь остаётся в статусе EXPIRED?

Изменение PASSWORD_LIFE_TIME не влияет на уже истёкшие пароли. Oracle фиксирует дату окончания в момент последней смены пароля, и корректировка профиля не пересчитывает её автоматически. Если статус уже EXPIRED, необходимо задать пароль заново через ALTER USER, после чего новая дата истечения будет рассчитана с учётом обновлённого значения профиля.

Как проверить, что пароль действительно больше не истекает для сервисного пользователя?

Нужно убедиться, что пользователь назначен профилю с PASSWORD_LIFE_TIME UNLIMITED, и проверить поле EXPIRY_DATE в DBA_USERS. При отсутствии ограничения дата истечения будет NULL. Дополнительно стоит выполнить тестовое подключение через SQL*Plus и проверить, что account_status равен OPEN без перехода в EXPIRED(GRACE) через заданное количество дней.

Ссылка на основную публикацию