
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.
Le message
ORA-01017: invalid username/password; logon denied
ORA-01017: nom utilisateur/mot de passe non valide ; connexion refuséeCause 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). MonPass ≠ monpass. 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
- Test en
sqlplusà la main (élimine l’app et le copier-coller). - Casse du mot de passe respectée ? (11g+)
- Bonne base / bon service TNS ?
account_statusdu compte (verrouillé/expiré) ?- 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.
