OLATOracle Log Analysis Tool Abrir a ferramenta
GraveSegurança

ORA-28040

Nenhum protocolo de autenticação compatível

O ORA-28040 (“No matching authentication protocol”) é o erro que mais assombra projetos de upgrade do Oracle — e quase sempre aparece no pior momento: logo depois da migração, quando a aplicação tenta conectar e não consegue.

A partir do Oracle 12.2, o valor padrão do parâmetro SQLNET.ALLOWED_LOGON_VERSION_SERVER passou a ser 12. Isso significa que o servidor deixou de aceitar os protocolos de autenticação antigos usados por clientes mais velhos (11g e anteriores).

O resultado é direto: o banco funciona perfeitamente, mas clientes antigos simplesmente não conseguem mais autenticar. A boa notícia é que isso é totalmente previsível — e evitável — se você levantar o inventário de clientes antes de migrar.

O que significa

Cliente ANTIGO (ex.: 11g) tentando autenticar em banco novo (12.2+/19c/23ai) que exige verificador de senha moderno — controlado por SQLNET.ALLOWED_LOGON_VERSION_SERVER. Assinatura clássica de pós-upgrade.

Como o erro aparece

ORA-28040: No matching authentication protocol

Passo a passo do diagnóstico consultas somente leitura

Levante os verificadores de senha existentes

Contas que possuem apenas o verificador antigo (10G) não conseguirão autenticar em servidores mais novos:

Consulta de verificadores por usuário

SELECT username, password_versions, account_status
  FROM dba_users
 WHERE oracle_maintained = 'N'
 ORDER BY password_versions, username;

Verifique o parâmetro atual no servidor

O arquivo é o sqlnet.ora do servidor (dentro de $ORACLE_HOME/network/admin):

Valor do parâmetro

SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12

Identifique quais clientes ainda são antigos

Além do inventário de aplicações, o listener.log ajuda a mapear quem conecta e com qual programa/driver. Esse levantamento deve ser feito antes do upgrade.

Solução definitiva: atualizar os clientes

Atualizar o driver JDBC ou o Oracle Client das aplicações é a única solução que não enfraquece a segurança do ambiente.

Solução paliativa (com ressalva de segurança)

SQLNET.ALLOWED_LOGON_VERSION_SERVER = 11

Ação imediata

Levante quais clientes/drivers antigos ainda conectam (o módulo Listener do OLAT mostra o mix de versões).

Correção definitiva

Ideal: atualizar clientes/JDBC. Paliativo: ALLOWED_LOGON_VERSION_SERVER=11 + resetar senhas para gerar verificador compatível (senha precisa ser REGRAVADA após mudar o parâmetro).

Como prevenir

Inventário de versões de cliente ANTES do upgrade (use o OLAT no listener.log atual).

Nota de versão

Default do parâmetro: 12 a partir do 12.2 — é aí que os clientes 11g quebram.

Erros comuns — o que não fazer

  • Alterar o parâmetro e achar que terminou. Este é o detalhe que faz muita gente perder a madrugada: depois de reduzir o ALLOWED_LOGON_VERSION_SERVER, é preciso redefinir a senha das contas afetadas para que o Oracle gere o verificador compatível. Sem o reset, o erro continua.
  • Tratar o paliativo como permanente. Reduzir o parâmetro reabilita protocolos de autenticação mais fracos — é uma decisão de segurança, não apenas técnica, e deve ter prazo para ser revertida.
  • Descobrir o problema durante a janela de migração. O inventário de versões de cliente é barato de fazer antes e caríssimo de descobrir depois, com o sistema parado e o relógio correndo.

Perguntas frequentes

Por que o erro ORA-28040 aparece depois do upgrade do Oracle?

Porque a partir da versão 12.2 o parâmetro SQLNET.ALLOWED_LOGON_VERSION_SERVER passou a ter valor padrão 12, e o servidor deixou de aceitar os protocolos de autenticação usados por clientes 11g e anteriores. As aplicações com drivers antigos param de conseguir autenticar.

Como corrigir o ORA-28040 sem atualizar os clientes?

É possível reduzir o parâmetro SQLNET.ALLOWED_LOGON_VERSION_SERVER no sqlnet.ora do servidor e, obrigatoriamente, redefinir as senhas das contas afetadas para gerar o verificador compatível. Trata-se, porém, de um paliativo que reabilita protocolos mais fracos — a solução definitiva é atualizar os clientes.

Como saber, antes do upgrade, quais aplicações vão quebrar?

Consultando a coluna PASSWORD_VERSIONS da view DBA_USERS para identificar contas com verificadores antigos, e levantando as versões de driver das aplicações que conectam no banco. O listener.log ajuda a mapear os programas que estabelecem conexões.

Erros relacionados (Segurança)

Vinicius Gabriel Lana

Vinicius Gabriel Lana

Sócio & CTO na MigraTI Soluções em TI · 8 anos como DBA (Oracle, SQL Server, PostgreSQL, MySQL)