| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > обращение к MySQL из PHP |
| Автор: Kludge 12.1.2006, 20:57 | ||||||||||
| пришло время обращаться к БД через PHP.
Пробовал второй способ как обычно через MS
последняя картина вроде как приятнее чем первая, но ... Подскажите пожалуйста, что я не так делаю. MySQL как служба работает. на компе стоит Апач, PHP 4, MySQL 4.1 |
| Автор: mr.fox 12.1.2006, 21:17 | ||
открой файл my.ini и добавь туда такую строку
в поле mysqld перезапусти серв, и будет тебе счастье |
| Автор: Kludge 12.1.2006, 21:34 |
| неа, не хотит |
| Автор: Illuminaty 12.1.2006, 22:25 | ||||
mr.fox, насколько я умею считать, в коде
|
| Автор: Mal Hack 12.1.2006, 22:36 |
| http://forum.vingrad.ru/index.php?showtopic=58863&hl=old_password http://forum.vingrad.ru/index.php?showtopic=69659&hl=old_password |
| Автор: Illuminaty 12.1.2006, 22:40 | ||
Скорее всего, судя по
|
| Автор: Kludge 13.1.2006, 07:32 | ||||||
| вот эта вещь не хочет line 8
выдает вотакое:
а это как? есть где почитать как это сделать? в php.ini БД подключена, но все равно не хочет, а через консоль все нормально (тока ж мне надо к РHP прикрутить |
| Автор: Mal Hack 13.1.2006, 14:11 | ||
Kludge обрати внимание на то, как написано в топике, на который я дал ссылку.
И что пишешь ты. Это пишется в файлах my.ini или my.cnf |
| Автор: Kludge 13.1.2006, 16:20 |
| ну приписываю это дело в файл my.ini, и тогда БД как служюа вообще не запускается тупость какая-то, неужели нельзя изготавливать уже готовые пакеты типа MySQL+PHP+сервер дело дрянь . . . |
| Автор: Mal Hack 13.1.2006, 18:15 | ||
Значит не правильно пишешь. Что мешает запустить mysqld из консоли и посмотреть ошибку? |
| Автор: Kludge 13.1.2006, 18:55 | ||||||
| Вот ответы на все наши беды и несчастья!! Ошибка при подключении к серверу: Client does not support authentication protocol Начиная с версии 4.1, в My SQL используется новый протокол аутентификации. В новом протоколе алгоритм хеширования данных аутентифмкации отличается от алгоритма более ранних версий сервера My SQL. По сути вся проблема сводится к тому, что хеш пароля “mypass” в версиях старше 4.1 (т.е. 4.1.*, 5.0.* и т.д.) имеет вид *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 (строка длиннее 41 байта), и тот же пароль “mypass” в версиях младше 4.1. (т.е. 4.0.*, 3.23.* и т.д.) имеет вид 6f8c114b58f2ce9e (строка 16 байт) Теперь возникает ситуация. Вы обновляете сервер до версии старше 4.1., а клиент у Вас остается старый. Вы все правильно установили, сервер нормально запустился. Вы запускаете клиента, вводите логин и пароль соответствующей учетной записи, нажимаете Enter, Ваш СТАРЫЙ клиент хеширует данные авторизации по СТАРОМУ алгоритму и передает их на сервер. Сервер принимает эти данные и сранивает их с данными из таблицы mysql.user. В результате такого сравнения сервер видит, что хеши паролей не совпадают (всего 16 байт, вместо ожидаемых, как минимум, 41-го байта). Вследствие чего, сервер выдает вполне информативное сообщение: Client does not support authentication protocol requested by server; consider upgrading MySQL client Что бы решить возникшую проблему, можно пойти по одному из следующих путей: Обновить всех клиентов (их библиотеки) до версии 4.1.1 или старше. Этот вариант идеальный, но не всегда подходит, потому что не для всех приложений существуют соответствующие обновленные библиотеки. Создать для «старых» клиентов учетные записи, которые хранят хеш пароля в старом формате. Для каждой учетной записи задать хеш пароля в старом формате. Это делается с помощью одной из двух конструкции:
Задать серверу в файле конфигурации (my.ini, my.cnf) директиву, которая указывает серверу использовать старый алгоритм хеширования пароля. Эта директива:
При этом не забудьте, что Вам нужно будет конвертировать хеши паролей из нового формата в старый формат. Это нужно будет сделить для всех учетных записей, у которых хеш пароля уже хранится в новом формате. Для того, что бы выбрать пользователей, у которых хеши паролей хранятся в новом формате нужно написать запрос вида:
Далее, для каждого пользователя в полученной таблице вы конвертируете пароль любым из вариантов, предложенным пунктом выше. -------------------------------------------------------------------------------- P.S. Если Вы программируете на языке PHP и версия языка младше версии 5.1, то знайте, что расширение My SQL использует старый протокол аутентификации, т.е. Вам придется работать со старым протоколом аутентификации, и лучше всего перевести сервер в режим старого протокола авторизации. В PHP версий старше 5.1. существует расширение mysqli, которое поддерживает новый протокол аутентификации. Не забудьте, что таблица mysql.user хранит хеши паролей. Эти хеши получены с помощью алгоритмов необратимого шифрования. Из этого следует, что Вы никогда не узнаете, какой пароль был источником для данного хеша и Вам придется создавать новые пароли для учетных записей. После создания паролей сообщите новые данные учетных записей всем пользователям этих учетных записей. взято отсюда http://phpclub.ru/faq/wakka.php?wakka=MySQLOldPassword&v=16ec |