Я унаследовал сервер Windows 2k3 с XAMPP-установкой из каменного века. Мне нужно было обновить PHP, чтобы облегчить обновление до MediaWiki, чтобы облегчить новое расширение MediaWiki (чтобы облегчить некоторую документацию, чтобы облегчить выполнение моей работы, чтобы облегчить получение оплаты для облегчения ... вы поняли).
Однако ... установка новой версии PHP привела к тому, что библиотеки PHP MySQL отказались взаимодействовать с использованием 152-битных паролей MySQL «старого стиля». Теоретически это не проблема. MySQL установлен после версии 4.1, поэтому он должен иметь возможность обновлять пароли пользователей со 152-битных до 328-битных (что за странный алгоритм хеширования ...).
Я выполнил следующее:
SET PASSWORD = PASSWORD('foo');
в MySQL, но запрашивает:
SELECT user, password FROM mysql.user;
вернул точно такой же пароль, с которым я начал - 152-битный. Теперь ... Я подозреваю, вы думаете: «АГА! старые пароли включены! ». К сожалению, это не так - я отключил его в конфигурации (явно установил значение 0), дважды удостоверился, что у меня есть абсолютная ссылка на этот файл конфигурации, и убедился, что служба не использует флаг --old-passwords. Служба сбрасывалась после каждой операции.
Итак, я перешел на другую систему и сгенерировал там 328-битный хэш, скопировав хеш в первый экземпляр MySQL. К сожалению, это тоже не сработало (я не забыл СМЫВАТЬ ПРИВИЛЕГИИ).
Ошибка приложения:
"'mysqlnd не может подключиться к MySQL 4.1+, используя старую небезопасную аутентификацию. Используйте инструмент администрирования [... snip ...]
Есть ли что-нибудь еще, что я могу попытаться заставить PHP распознавать MySQL как не использующий «старую небезопасную аутентификацию»? Кажется, что MySQL застрял в режиме «старых паролей», и я не могу его вывести.
Исправлена. Только богам известно, по какой причине столбец пароля таблицы mysql.user был символом (16). Установите его на char (41), сбросил туда хэш, сгенерированный из другой БД, и он был счастлив.