Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
в общем, столкнулся с такой проблемой: у пользователя задан русский пароль, изменить мне его на английский сейчас нет возможности. Когда подключаюсь через mysql клиент, то он не соединяется и выдает ошибку.
Так как же так, некотороые сторонние клиенты нормально подсоединяются с русским паролем, а вот штатные вещи ну ни в какую. В какой кодировке передается пароль пользователя который подсоединяется к MYSQL DB
Отредактированно DJK (11.11.2009 17:01:29)
Неактивен
Боюсь, что в кодировке, в которой отправляет клиент, бинарно преобразуется в хэшики,
и потом уже сравнивается с тем, что хранится в базе. Подозреваю, что у Вас windows
и подключение штатное идет через php (и, стало быть, cp1251), а в консоли cp866.
chcp Вас спасет.
Неактивен
нет, я подключаюсь используя напрямую libmysql
фишка в том, что используя mysql_real_connection с русским паролем
(винда, значит и русские буквы пароля в кодировке win-1251), но вылетает ошибка Access denied (доступ запрещен).
пакеты я просмотрел снифером и действительно мой пароль в хэше или еще он там в чем, отличается от того что посылает SQLyog например. Но пароль шифруется самой библиотекой, так вот и остается загадкой, почему некоторые клиенты могут подключиться к БД используя русский пароль, а другие нет.
Отредактированно DJK (11.11.2009 16:51:01)
Неактивен
Поугадывать кодировки Вам помогут какие-то такие запросы:
Неактивен
увы, но хэши паролей в базе не имеют ничего общего с шифрованием пароля при подключении в базе денных.
Таки копанием в исходниках нашел следующую систему аутентификации
The new authentication is performed in following manner:
SERVER: public_seed=create_random_string()
send(public_seed)
CLIENT: recv(public_seed)
hash_stage1=sha1("password")
hash_stage2=sha1(hash_stage1)
reply=xor(hash_stage1, sha1(public_seed,hash_stage2)
// this three steps are done in scramble()
send(reply)
SERVER: recv(reply)
hash_stage1=xor(reply, sha1(public_seed,hash_stage2))
candidate_hash2=sha1(hash_stage1)
check(candidate_hash2==hash_stage2)
буду разбираться что к чему
Отредактированно DJK (11.11.2009 18:17:13)
Неактивен
Это верно только если мы говорим о разных паролях (пароль к сайту?). В случае
с паролями из mysql.user, они не просто имеют общее — они совпадают
Неактивен
Тогда по полочкам:
1. В для подключения к mysql серверу есть аккаунт, допустим логин и пароль будут соответствующие test и привет.
2. Если подключаться к серверу используя клиент MySQL Query Browser (для примера),
то авторизация по указанной паре логин пароль происходит нормально.
3. А вот если использовать библиотеку libmysql и её функцию mysql_real_connection с той же парой логин-пароль, то в результате получаю Access denied.
Интересно, так что же за косяк такой. Уже всю голову сломал думавши.
Отредактированно DJK (11.11.2009 18:27:09)
Неактивен
Сделайте SELECT password FROM mysql.user WHERE user='test' и посмотрите хэшик пароля.
Возьмите слово «привет» в разных русских кодировках и выполните
SELECT PASSWORD('привет') для них. Определите методом пристального вглядывания
правильную кодировку
MySQL Query Browser использует utf8 почти наверняка.
Неактивен
спасибо, все тайное стало явью.
даже если мы пишем в формате cp1251 все преобразоввывается в utf8
как только я ковертировал пароль в utf8 сразу же подключилось
Неактивен
Страниц: 1