Corrigido. Para os Deuses, só sei que razão a coluna 'password' da tabela mysql.user era um char (16). Configure-o para char (41), jogue o hash gerado a partir do outro DB e ele ficou feliz.
Eu herdei um servidor Windows 2k3 executando uma instalação do XAMPP a partir da idade da pedra. Eu precisava atualizar o PHP para facilitar uma atualização para o MediaWiki para facilitar uma nova extensão do MediaWiki (para facilitar alguma documentação para facilitar meu trabalho para facilitar o pagamento para facilitar ... você entendeu).
No entanto ... instalar uma nova versão do PHP resultou em bibliotecas MySQL do PHP se recusando a se comunicar usando as senhas de 152 bits do "estilo antigo" do MySQL. Não é um problema na teoria. A instalação do MySQL é pós-4.1, então deve ter a funcionalidade de atualizar as senhas do usuário de 152 bits para 328 bits (o que é um algoritmo de hash estranho ...).
Eu corri o seguinte:
SET PASSWORD = PASSWORD('foo');
no MySQL, mas consultando:
SELECT user, password FROM mysql.user;
retornou a mesma senha com a qual eu comecei - 152 bits. Agora ... eu suspeito que você esteja pensando 'AHA! senhas antigas estão ativadas! '. Infelizmente não é - eu o desabilitei na configuração (explicitamente configurei para 0), tornei duplamente certo que tenho uma referência absoluta a esse arquivo de configuração e assegurei que o serviço não está usando o sinalizador --old-passwords. O serviço foi reiniciado após cada operação.
Então eu fui para outro sistema e gerou o hash de 328 bits, copiando o hash para a primeira instância do MySQL. Infelizmente, isso também não funcionou (eu me lembrei de FLUSH PRIVILEGES).
O erro do aplicativo é:
"'mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool [...snip...]
Existe mais alguma coisa que eu possa tentar fazer com que o PHP reconheça o MySQL como não usando a 'antiga autenticação insegura'? O MySQL parece estar preso no modo 'senhas antigas' e eu não consigo tirá-lo disso.