ORA-28040: Nenhuma exceção de protocolo de autenticação correspondente

89

Estou tentando conectar meu projeto grails ao banco de dados Oracle ( Oracle 12c ) no sistema windows (8). No entanto, sempre que executo meu aplicativo, recebo a seguinte exceção:

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

De acordo com sugestão da internet também tentei editar meu *.oraarquivo, mas não está funcionando.

Eu adicionei o seguinte snippet no sqlnet.oraarquivo:

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

Aqui eu tentei atribuir (10,11,12), mas nenhum deles está funcionando.

Alguém por favor pode me ajudar com isso ?

Aman Adhikari
fonte
Qual sqlnet.ora você editou, no cliente ou no servidor?
Jon Heller
1
Não tenho certeza, pois sou novato nisso. No entanto, o arquivo que editei continha apenas algumas linhas. Continha: '# sqlnet.ora Arquivo de configuração de rede: E: \ app \ adhikariaman01 \ product \ 12.1.0 \ dbhome_1 \ network \ admin \ sqlnet.ora # Gerado pelas ferramentas de configuração Oracle. # Este arquivo é realmente gerado pelo netca. Mas se os clientes escolherem # instalar "Somente Software", esse arquivo não existirá e sem a autenticação # nativa, eles não poderão se conectar ao banco de dados no NT. SQLNET.AUTHENTICATION_SERVICES = (NTS) NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT) '
Aman Adhikari
2
Isso soa como o arquivo do servidor de banco de dados. Esses problemas podem ser realmente difíceis. Você pode se conectar ao servidor de banco de dados usando SQL * Plus? Você está usando um thin client JDBC e, em caso afirmativo, pode tentar um thick client?
Jon Heller
Sim, estou conectado via SQL * plus
Aman Adhikari
1
Resolvi o problema :). Excluí o arquivo ojdbc14.jar e usei ojdbc6.jar, e funcionou para mim. De qualquer forma, obrigado por responder.
Aman Adhikari

Respostas:

148

Excluí o arquivo ojdbc14.jar e usei ojdbc6.jar e funcionou para mim

Aman Adhikari
fonte
3
ter o mesmo problema ao tentar conectar o Oracle 12c da chaleira pentaho. removido ojdbc14.jar e está funcionando perfeitamente!
lourdh
16
Pelo menos uma breve explicação de por que isso deve funcionar seria muito útil.
Yuriy Kravets
8
Para mim, mudar para ojdbc6.jar ou ojdbc7.jar ainda falhou porque eu estava constantemente configurando: o oracle.jdbc.thinLogonCapability"="o3"que você não precisa mais fazer no oracle 12c. Espero que possa ajudar alguém
James Tobin
3
Isso funciona perfeitamente depois de excluir ojdbc14.jar e usar ojdbc6.jar
Sam
1
@YuriyKravets O número 14 em ojdbc14.jar e o número 6 em ojdbc6.jar referem-se à versão do JDK para a qual foram escritos. Se você abrir o arquivo de manifesto ojdbc14.jar , ele diz: Specification-Title: "Classes de driver Oracle JDBC para uso com JDK1.4" Da mesma forma, ojdbc6.jar oferece suporte à implementação JDK1.6.
Maverick de
54

Aqui está um texto que encontrei em experts-exchange :

Bug 14575666

Em 12.1, o valor padrão para o parâmetro SQLNET.ALLOWED_LOGON_VERSION foi atualizado para 11. Isso significa que os clientes de banco de dados que usam drivers thin JDBC pré-11g não podem se autenticar em servidores de banco de dados 12.1, a menos que o parâmetroSQLNET.ALLOWED_LOGON_VERSION seja definido com o padrão antigo de 8.

Isso fará com que a criação do banco de dados Oracle RAC 10.2.0.5 usando DBCA falhe com o ORA-28040: Erro de protocolo de autenticação sem correspondência em ambientes 12.1 Oracle ASM e Oracle Grid Infrastructure.

Solução alternativa: defina SQLNET.ALLOWED_LOGON_VERSION = 8 no arquivo oracle / network / admin / sqlnet.ora.

Simon
fonte
Apenas para referência: funcionou para mim, não excluindo o arquivo ojdbc14.jar e usando ojdbc6.jar
rageit
4
sim, no meu caso isso resolveu o problema, mas ocorreu outro: nome de usuário / senha inválidos. btw, eu estava tentando conectar do oracle jdeveloper 10 ao banco de dados oracle 12c. então esta foi a resposta: stackoverflow.com/questions/14476875/… finalmente teve que: 1) alterar SQLNET.ALLOWED_LOGON_VERSION para 8 2) SQLNET.AUTHENTICATION_SERVICES para (NONE) 3) ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE 4) ALTER USER XX IDENTIFICADO POR PW (para salvar novamente a senha agora que alteramos a
distinção
Atrasado para a festa, mas também confirmei essa correção. I teve para definir a minha versão = 8, embora eu estava correndo JDBC 11 - nada mais novo do que 8 funcionou.
Keith de
Estou usando um servidor de banco de dados remoto, não tenho acesso à máquina, posso apenas conectar ao banco de dados usando o SQL Developer (sem erro), mas meu aplicativo (implantado no Tomcat) gera este erro. Eu mudei as configurações na minha máquina local, ela não está funcionando. Tenho que modificar as configurações na máquina do servidor?
Gunwant
5

Exceto para adicionar o seguinte ao sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

Se você receber o erro "ORA-01017: nome de usuário / senha inválidos; logon negado", será necessário recriar sua senha.

CodeArt
fonte
Se você receber o erro "ORA-01017: nome de usuário / senha inválidos; logon negado", será necessário recriar sua senha. Este foi um salva-vidas !! Obrigado
Thomas VC
4

Resolvi esse problema usando ojdbc8.jar. Oracle 12c é compatível com ojdbc8.jar

Shardendu
fonte
3

Exceto para adicionar o seguinte a sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

Também adicionei o seguinte ao cliente e ao servidor, o que resolveu meu problema

SQLNET.AUTHENTICATION_SERVICES = (NONE)

Consulte também a postagem ORA-28040: Nenhum protocolo de autenticação correspondente

Werner Bisschoff
fonte
3

Eu estava usando o eclipse e depois de tentar todas as outras respostas, não funcionou para mim. No final, o que funcionou para mim foi mover ojdb7.jarpara o topo no Build Path. Isso ocorre quando vários jars têm as mesmas classes conflitantes.

  1. Selecione o projeto em Project Explorer
  2. Clique com o botão direito em Project -> Build Path -> Configure Build Path
  3. Vá para a Order and Exportguia e selecioneojdbc.jar
  4. Clique no botão TOPpara movê-lo para o topo
Sandesh Gupta
fonte
1

Adicionando

SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

é a solução perfeita para o diretório sql.ora .. \ product \ 12.1.0 \ dbhome_1 \ NETWORK \ ADMIN

Birhan Nega
fonte
0

Meu erro inicial é: ORA-28040: Nenhuma exceção de protocolo de autenticação correspondente

Minha versão do banco de dados é 12.2 (Solaris) e a versão do cliente é 11.2 (windows). Eu adicionei abaixo no servidor e no cliente sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8 SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

durante a conexão, obtive nome de usuário e senha inválidos, portanto, recriei a senha (mesma senha) no banco de dados, o que resolveu meu problema.

Arumugaraj Kuthalingam
fonte
0

Embora, na maioria dos casos, substituir o jar do driver ojdbc seja a solução, meu caso era diferente.

Se você tiver certeza de que está usando o driver ojdbc correto. Verifique novamente se você está realmente se conectando ao banco de dados que pensa estar. No meu caso, a configuração jdbc (em Tomcat / conf) estava apontando para um banco de dados diferente que tinha uma versão Oracle diferente.

user435421
fonte
0

Pergunta muito antiga, mas fornecendo algumas informações adicionais que podem ajudar outra pessoa. Também encontrei o mesmo erro e estava usando ojdbc14.jar com o banco de dados Oracle 12.1.0.2. Na página web oficial da Oracle, esta informação está listada com qual versão suporta quais drivers de banco de dados. Aqui está o link e parece que com Oracle 12c e Java 7 ou 8, a versão correta é ojdbc7.jar.

No ojdbc6.jar é para 11.2.0.4.

Karan
fonte
-1

basta instalar ojdbc-full, que contém a versão 12.1.0.1.

Ali Mhamad Slim
fonte