ORA-01017 « invalid username/password » : comment la corriger

ORA-01017 « invalid username/password » : casse du mot de passe, compte verrouillé, mauvaise base… toutes les causes et comment vous reconnecter.

Illustration de l'erreur Oracle ORA-01017

ORA-01017 « invalid username/password; logon denied » signifie qu’Oracle a refusé votre connexion : identifiant ou mot de passe incorrect — mais pas seulement. Casse du mot de passe, compte verrouillé, mauvaise base cible ou paramètre de compatibilité : voici toutes les causes réelles et leurs solutions.

Publicité

Le message

ORA-01017: invalid username/password; logon denied
ORA-01017: nom utilisateur/mot de passe non valide ; connexion refusée

Cause 1 — Identifiants réellement incorrects

Évident, mais vérifiez d’abord : faute de frappe, espace copié-collé en fin de mot de passe, clavier AZERTY/QWERTY. Testez en ligne de commande pour isoler le problème de votre application :

sqlplus mon_user@ma_base
-- saisir le mot de passe à la main (pas de copier-coller)

Cause 2 — La casse du mot de passe (piège n°1 depuis Oracle 11g)

Depuis Oracle 11g, les mots de passe sont sensibles à la casse (SEC_CASE_SENSITIVE_LOGON=TRUE par défaut). MonPassmonpass. Un vieux script qui fonctionnait sur 10g peut échouer après migration. Solution : saisir le mot de passe avec sa casse exacte, ou le réinitialiser :

ALTER USER mon_user IDENTIFIED BY "NouveauPass#2026";

Cause 3 — Vous n’êtes pas connecté à la bonne base

Identifiants corrects… mais sur la mauvaise base (DEV vs PROD, mauvais service dans le tnsnames.ora, variable ORACLE_SID erronée). En cas de doute :

-- une fois connecté avec un compte qui marche
SELECT name FROM v$database;
SELECT sys_context('USERENV','SERVICE_NAME') FROM dual;

Si la connexion échoue avant même d’atteindre la base avec une erreur TNS, voyez plutôt ORA-12154.

Cause 4 — Compte verrouillé ou mot de passe expiré

Trop de tentatives échouées verrouillent le compte (profil FAILED_LOGIN_ATTEMPTS) :

SELECT username, account_status FROM dba_users WHERE username = 'MON_USER';
-- LOCKED(TIMED), LOCKED, EXPIRED...

ALTER USER mon_user ACCOUNT UNLOCK;
ALTER USER mon_user IDENTIFIED BY "NouveauPass#2026";  -- si expiré

Au passage, notre tutoriel CREATE USER Oracle couvre la création et les profils de comptes.

Cause 5 — Incompatibilité de version du client (12c+ vs vieux client)

Un client trop ancien (ou un driver JDBC daté) face à une base récente peut produire ORA-01017 même avec le bon mot de passe, à cause des nouvelles versions d’authentification. Côté serveur, le paramètre SQLNET.ALLOWED_LOGON_VERSION_SERVER (sqlnet.ora) fixe le niveau minimal accepté. La vraie solution est de mettre à jour le client/driver ; le contournement (abaisser le paramètre + réinitialiser le mot de passe) doit rester temporaire.

Cas particulier — « ORA-01017 » en tant que SYS

Pour SYS AS SYSDBA en local, l’authentification OS peut jouer : si votre utilisateur OS appartient au groupe dba, sqlplus / as sysdba se connecte sans mot de passe. À distance, il faut un password file correctement configuré (orapwd).

Checklist de résolution

  1. Test en sqlplus à la main (élimine l’app et le copier-coller).
  2. Casse du mot de passe respectée ? (11g+)
  3. Bonne base / bon service TNS ?
  4. account_status du compte (verrouillé/expiré) ?
  5. Client/driver à jour face à la version de la base ?

FAQ

Le nom d’utilisateur est-il sensible à la casse ?

Non (sauf création entre guillemets doubles, rarissime). Seul le mot de passe est sensible à la casse depuis 11g.

Comment savoir combien de tentatives restent avant verrouillage ?

Regardez le profil : SELECT p.limit FROM dba_profiles p JOIN dba_users u ON u.profile=p.profile WHERE u.username='MON_USER' AND p.resource_name='FAILED_LOGIN_ATTEMPTS';

ORA-01017 avec un mot de passe 100% sûr — que regarder en premier ?

La base cible (êtes-vous sur le bon environnement ?) puis la version du client/driver JDBC.

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité