ORA-28040: aucune exception de protocole d'authentification correspondante

92

J'essaie de connecter mon projet Grails à la base de données Oracle ( Oracle 12c ) dans le système Windows (8). Cependant, chaque fois que j'exécute mon application, j'obtiens l'exception suivante:

Caused by: org.apache.commons.dbcp.SQLNestedException: 
Cannot create PoolableConnectionFactory (ORA-28040: 
No matching authentication protocol)

Caused by: 
java.sql.SQLException: ORA-28040: 
No matching authentication protocol

Selon une suggestion Internet, j'ai également essayé de modifier mon *.orafichier mais cela ne fonctionne pas.

J'ai ajouté l'extrait suivant dans le sqlnet.orafichier:

SQLNET.ALLOWED_LOGON_VERSION=10
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10
SQLNET.ALLOWED_LOGON_VERSION_SERVER=10

Ici, j'ai essayé d'assigner (10,11,12) mais aucun d'eux ne fonctionne.

Quelqu'un peut-il m'aider s'il vous plaît?

Aman Adhikari
la source
Quel sqlnet.ora avez-vous édité, celui sur le client ou le serveur?
Jon Heller
1
Je ne suis pas sûr car je suis novice. Cependant, le fichier que j'ai édité ne contenait que quelques lignes. Il contenait: '# sqlnet.ora Network Configuration File: E: \ app \ adhikariaman01 \ product \ 12.1.0 \ dbhome_1 \ network \ admin \ sqlnet.ora # Généré par les outils de configuration Oracle. # Ce fichier est en fait généré par netca. Mais si les clients choisissent # d'installer "Logiciel uniquement", ce fichier n'existera pas et sans l'authentification # native, ils ne pourront pas se connecter à la base de données sur NT. SQLNET.AUTHENTICATION_SERVICES = (NTS) NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT) '
Aman Adhikari
2
Cela ressemble au fichier du serveur de base de données. Ces problèmes peuvent être vraiment difficiles. Pouvez-vous vous connecter au serveur de base de données à l'aide de SQL * Plus? Utilisez-vous un client léger JDBC, et si oui, pouvez-vous essayer un client lourd?
Jon Heller
Oui, je suis connecté via SQL * plus
Aman Adhikari
1
J'ai résolu le problème :). J'ai supprimé le fichier ojdbc14.jar et utilisé ojdbc6.jar à la place et cela a fonctionné pour moi. En tout cas merci d'avoir répondu.
Aman Adhikari

Réponses:

152

J'ai supprimé le fichier ojdbc14.jar et utilisé ojdbc6.jar à la place et cela a fonctionné pour moi

Aman Adhikari
la source
3
rencontrez le même problème en essayant de connecter Oracle 12c à partir d'une bouilloire pentaho. supprimé ojdbc14.jar et son fonctionne parfaitement!
lourdh
17
Au moins une brève explication pourquoi cela devrait fonctionner serait très pratique.
Yuriy Kravets
8
Pour moi, le passage à ojdbc6.jar ou ojdbc7.jar a toujours échoué parce que j'avais constamment mis en place: oracle.jdbc.thinLogonCapability"="o3"ce que vous n'avez plus à faire contre oracle 12c. J'espère que cela peut aider quelqu'un d'autre
James Tobin
3
Cela fonctionne parfaitement après la suppression de ojdbc14.jar et l'utilisation de ojdbc6.jar
Sam
1
@YuriyKravets Le numéro 14 dans ojdbc14.jar et le numéro 6 dans ojdbc6.jar se réfèrent à la version JDK pour laquelle ils ont été écrits. Si vous ouvrez le fichier manifeste de ojdbc14.jar , il dit: Specification-Title: "Classes de pilote Oracle JDBC à utiliser avec JDK1.4" De même, ojdbc6.jar prend en charge l'implémentation JDK1.6.
Maverick
55

Voici un texte que j'ai trouvé lors de l'échange d'experts :

Bogue 14575666

Dans la version 12.1, la valeur par défaut du paramètre SQLNET.ALLOWED_LOGON_VERSION a été mise à jour à 11. Cela signifie que les clients de base de données utilisant des pilotes légers JDBC antérieurs à 11g ne peuvent pas s'authentifier auprès des serveurs de base de données 12.1 à moins que le paramètre SQLNET.ALLOWED_LOGON_VERSION soit défini sur l'ancienne valeur par défaut de 8.

Cela entraînera l'échec d'une création de base de données Oracle RAC 10.2.0.5 à l'aide de DBCA avec ORA-28040: aucune erreur de protocole d'authentification correspondante dans les environnements 12.1 Oracle ASM et Oracle Grid Infrastructure.

Solution de contournement: définissez SQLNET.ALLOWED_LOGON_VERSION = 8 dans le fichier oracle / network / admin / sqlnet.ora.

Simon
la source
Juste pour référence: cela a fonctionné pour moi sans supprimer le fichier ojdbc14.jar et en utilisant ojdbc6.jar
rageit
4
oui, dans mon cas, cela a résolu le problème, mais un autre s'est produit: nom d'utilisateur / mot de passe invalide. btw j'essayais de me connecter d'Oracle Jdeveloper 10 à Oracle Database 12c. donc cela a donné la réponse: stackoverflow.com/questions/14476875/ ... a finalement dû: 1) changer SQLNET.ALLOWED_LOGON_VERSION en 8 2) SQLNET.AUTHENTICATION_SERVICES en (AUCUN) 3) ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE 4) ALTER USER XX IDENTIFIÉ PAR PW (pour réenregistrer le mot de passe maintenant que nous avons changé le
respect de la
En retard à la fête, mais j'ai également confirmé ce correctif. J'ai définir ma version = 8 même si j'utilisais JDBC 11 - rien de plus récent que 8 ne fonctionnait.
Keith
J'utilise un serveur de base de données distant, je n'ai pas accès à la machine, je peux simplement me connecter à la base de données à l'aide de SQL Developer (sans erreur), mais mon application (déployée sur Tomcat) lève cette erreur. J'ai changé les paramètres sur ma machine locale, cela ne fonctionne pas. Dois-je modifier les paramètres sur le serveur?
Gunwant
5

J'ai résolu ce problème en utilisant ojdbc8.jar. Oracle 12c est compatible avec ojdbc8.jar

Shardendu
la source
5

Ceci sauf pour ajouter ce qui suit à sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

Si vous obtenez l'erreur «ORA-01017: nom d'utilisateur / mot de passe invalide; ouverture de session refusée», vous devez recréer votre mot de passe.

CodeArt
la source
Si vous obtenez l'erreur «ORA-01017: nom d'utilisateur / mot de passe invalide; ouverture de session refusée», vous devez recréer votre mot de passe. C'était une bouée de sauvetage !! Merci
Thomas VC le
3

Sauf pour ajouter ce qui suit à sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

J'ai également ajouté ce qui suit au client et au serveur, ce qui a résolu mon problème

SQLNET.AUTHENTICATION_SERVICES = (NONE)

Voir également l'article ORA-28040: Aucun protocole d'authentification correspondant

Werner Bisschoff
la source
3

J'utilisais eclipse et après avoir essayé toutes les autres réponses, cela n'a pas fonctionné pour moi. En fin de compte, ce qui a fonctionné pour moi a été de déplacer le ojdb7.jarvers le haut dans le chemin de construction. Cela se produit lorsque plusieurs fichiers JAR ont les mêmes classes en conflit.

  1. Sélectionnez un projet dans Project Explorer
  2. Faites un clic droit sur Project -> Build Path -> Configure Build Path
  3. Allez dans l' Order and Exportonglet et sélectionnezojdbc.jar
  4. Cliquez sur le bouton TOPpour le déplacer vers le haut
Sandesh Gupta
la source
1

Ajouter

SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

est la solution parfaite pour le répertoire sql.ora .. \ product \ 12.1.0 \ dbhome_1 \ NETWORK \ ADMIN

Birhan Nega
la source
1

Question très ancienne mais fournissant des informations supplémentaires qui peuvent aider quelqu'un d'autre. J'ai également rencontré la même erreur et j'utilisais ojdbc14.jar avec la base de données Oracle 12.1.0.2. Sur la page Web officielle d'Oracle, ces informations indiquent quelle version prend en charge les pilotes de base de données. Voici le lien et il semble qu'avec Oracle 12c et Java 7 ou 8, la version correcte est ojdbc7.jar.

Dans l'ojdbc6.jar est pour 11.2.0.4.

Karan
la source
0

Mon erreur initiale est: ORA-28040: aucune exception de protocole d'authentification correspondante

Ma version de base de données est 12.2 (Solaris) et la version client est 11.2 (Windows). J'ai ajouté ci-dessous à la fois le serveur et le client sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8 SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

lors de la connexion, j'ai un nom d'utilisateur et un mot de passe invalides et j'ai donc recréé le mot de passe (même mot de passe) dans la base de données, ce qui a résolu mon problème.

Arumugaraj Kuthalingam
la source
0

Alors que dans la plupart des cas, le remplacement du fichier jar du pilote ojdbc sera la solution, mon cas était différent.

Si vous êtes certain d'utiliser le bon pilote ojdbc. Vérifiez si vous vous connectez réellement à la base de données que vous pensez être. Dans mon cas, la configuration jdbc (dans Tomcat / conf) pointait vers une base de données différente qui avait une version d'Oracle différente.

user435421
la source
-1

installez simplement ojdbc-full, qui contient la version 12.1.0.1.

Ali Mhamad Slim
la source