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.