Ошибка ORA-01017: invalid username/password в Oracle DB — решение
- Отказ в аутентификации
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.
Частые вопросы (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").