O problema aqui foi devido a dois problemas simultâneos.
- No servidor remoto, a configuração global OLD_PASSWORDS foi definida como 1, o que significa que as senhas estavam sendo criptografadas no método pré-4.1.
- a conta root foi codificada no método de hash mais recente, apesar da configuração global (presumivelmente, foi inserida antes que esse parâmetro fosse definido), o que significa que estava recebendo acesso por meio da conexão ODBC porque o novo hash foi reconhecido.
A configuração global fez com que a função PASSWORD() no MySQL fizesse o hash de qualquer valor inserido no método antigo em vez do novo método como deveria.
Eu assumi que o DBA havia definido OLD_PASSWORDS como 1 por um bom motivo, então como uma solução eu usei
O uso da função password() não funcionou anteriormente porque a configuração global OLD_PASSWORDS=1 fazia com que ela usasse o mesmo hash da função OLD_PASSWORD(). A configuração da sessão permitiu que produzisse a senha correta.