Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

Ошибка ORA-01017: invalid username/password в Oracle DB — решение

Обновлено: 26.08.2026  ·  Официальная база знаний
  • Отказ в аутентификации ORA-01017: invalid username/password; logon denied.
  • Блокировка учетной записи пользователя из-за превышения счетчика FAILED_LOGIN_ATTEMPTS (код ORA-28000).
  • Сбои соединений после миграции базы на Oracle 12c/19c со старых версий (11g/10g).

1. Проверка статуса пользователя и блокировок

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

2. Разблокировка учетной записи и сброс пароля

-- Разблокировка аккаунта
ALTER USER APP_USER ACCOUNT UNLOCK;

-- Установка нового пароля
ALTER USER APP_USER IDENTIFIED BY "NewSecurePass123!";

3. Проверка чувствительности к регистру (SEC_CASE_SENSITIVE_LOGON)

По умолчанию в Oracle 12c+ пароли чувствительны к регистру. Проверьте параметр:

SHOW PARAMETER sec_case_sensitive_logon;

4. Проверка поддерживаемых версий хешей паролей (SQLNET.ALLOWED_LOGON_VERSION)

Если старые клиенты (Oracle 10g/11g) не могут подключиться к 19c, проверьте файл $ORACLE_HOME/network/admin/sqlnet.ora:

SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8

После изменения параметров в sqlnet.ora необходимо заново переустановить пароль пользователя через ALTER USER.

Практический опыт инженера: Будьте аккуратны с триггерами `AFTER LOGON ON DATABASE`. Если в коде триггера возникнет необработанное исключение (Unhandled Exception), Oracle прервет вход клиента и вернет вызывающему приложению ошибку ORA-01017 или ORA-00604.

Частые вопросы (FAQ)

Почему после изменения sqlnet.ora старый клиент все равно получает ORA-01017?

Хеши паролей старого формата (10G/11G) не генерируются задним числом. После разрешения старых протоколов в sqlnet.ora нужно явно выполнить ALTER USER user IDENTIFIED BY password;, чтобы сгенерировать совместимый хеш в sys.user$.

Как отключить блокировку учетной записи после N неудачных попыток?

Измените профиль пользователя: ALTER PROFILE default LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;.

Как отследить хост, с которого идут ошибочные попытки авторизации?

Используйте Unified Auditing или традиционный аудит: AUDIT LOGON WHENEVER NOT SUCCESSFUL; затем выполните выборку из dba_audit_trail (поля OS_USERNAME, USERHOST, TERMINAL).

Влияют ли пробелы или спецсимволы в пароле на ORA-01017?

Да. Если пароль содержит спецсимволы (@, #, $, !), при смене и при передаче в connection string он должен экранироваться двойными кавычками (например: IDENTIFIED BY "P@ss#123").