Cet article explique l’erreur « ORA-28040: No matching authentication protocol » obtenue lors d’une connexion à une base Oracle 12.2.
- Ce problème a été rencontré sur des bases en 12.2, avec des clients en 11.2.0.1.
- Cette erreur traduit un problème de compatibilité entre le protocole d’authentification utilisé côté client et côté serveur.
- Le protocole d’authentification utilisé côté serveur dépend du paramètre SQLNET.ALLOWED_LOGON_VERSION_SERVER du fichier sqlnet.ora.
- Attention, il s’agit du fichier sqlnet.ora du RDBMS HOME, pas du GRID HOME, même si le listener est démarré à partir du GRID HOME.
- Le numéro de version spécifié par ce paramètre n’est pas celui du client ou du moteur Oracle, mais la version du protocole d’authentification.
- Si ce paramètre vaut 12a, il faut que le client soit minimum en 12.1.
- Si ce paramètre vaut 12 (défaut), il faut que le client soit minimum en 11.2.0.3 ; pour les clients plus anciens, il faut que le CPUOct2012 (ou plus récent) ait été appliqué côté client.
- Si ce paramètre vaut 11, et que le client est inférieur à 11.2.0.3 et sans le CPUOct 2012, il faut utiliser la version 10G des mots de passe.
Ci-dessous deux solutions possibles pour contourner l’erreur ORA-28040.
- Option 1 : passer sur une version du client Oracle compatible avec la valeur par défaut du paramètre SQLNET.ALLOWED_LOGON_VERSION_SERVER.
- Option 2 : rester dans la version courante du client ; dans ce cas, il faut :
- Positionner SQLNET.ALLOWED_LOGON_VERSION_SERVER=11 dans le fichier sqlnet.ora côté serveur, dans le RDBMS HOME.
- Redémarrer l’instance ; à partir de ce moment, la base n’exclue plus l’utilisation de mot de passe 10G.
- Faire un reset du mot de passe des comptes pour lesquels on essaie de se connecter à partir du client 11.2.0.1, en réutilisant le même mot de passe.
alter user identified by password;
- Valider que la valeur du champ PASSWORD_VERSIONS a bien été modifiée pour les comptes en question (passage de « 11G 12C » à « 10G 11G 12C »).
SQL> select username,password_versions from dba_users;
- Valider la connexion à partir du client 11.2.0.1.