SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 11.11.2009 14:05:47

DJK
Завсегдатай
Зарегистрирован: 09.08.2009
Сообщений: 32

Если русский пароль у пользователя, как соединиться с БД

в общем, столкнулся с такой проблемой: у пользователя задан русский пароль, изменить мне его на английский сейчас нет возможности. Когда подключаюсь через mysql клиент, то он не соединяется и выдает ошибку.
Так как же так, некотороые сторонние клиенты нормально подсоединяются с русским паролем, а вот штатные вещи ну ни в какую. В какой кодировке передается пароль пользователя который подсоединяется к MYSQL DB

Отредактированно DJK (11.11.2009 17:01:29)

Неактивен

 

#2 11.11.2009 14:49:47

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Если русский пароль у пользователя, как соединиться с БД

Боюсь, что в кодировке, в которой отправляет клиент, бинарно преобразуется в хэшики,
и потом уже сравнивается с тем, что хранится в базе. Подозреваю, что у Вас windows
и подключение штатное идет через php (и, стало быть, cp1251), а в консоли cp866.
chcp Вас спасет.

Неактивен

 

#3 11.11.2009 15:10:52

DJK
Завсегдатай
Зарегистрирован: 09.08.2009
Сообщений: 32

Re: Если русский пароль у пользователя, как соединиться с БД

нет, я подключаюсь используя напрямую libmysql
фишка в том, что используя mysql_real_connection с русским паролем
(винда, значит и русские буквы пароля в кодировке win-1251), но вылетает ошибка Access denied (доступ запрещен).
пакеты я просмотрел снифером и действительно мой пароль в хэше или еще он там в чем, отличается от того что посылает SQLyog например. Но пароль шифруется самой библиотекой, так вот и остается загадкой, почему некоторые клиенты могут подключиться к БД используя русский пароль, а другие нет.

Отредактированно DJK (11.11.2009 16:51:01)

Неактивен

 

#4 11.11.2009 17:31:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Если русский пароль у пользователя, как соединиться с БД

Поугадывать кодировки Вам помогут какие-то такие запросы:

mysql> select password('сакила');
+-------------------------------------------+
| password('сакила')                        |
+-------------------------------------------+
| *E8AE69369EBC6BE1365281486518CBBE6364E539 |
+-------------------------------------------+
1 row in set (0,00 sec)

Неактивен

 

#5 11.11.2009 17:50:45

DJK
Завсегдатай
Зарегистрирован: 09.08.2009
Сообщений: 32

Re: Если русский пароль у пользователя, как соединиться с БД

увы, но хэши паролей в базе не имеют ничего общего с шифрованием пароля при подключении в базе денных.

Таки копанием в исходниках нашел следующую систему аутентификации

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)

Неактивен

 

#6 11.11.2009 18:02:32

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Если русский пароль у пользователя, как соединиться с БД

Это верно только если мы говорим о разных паролях (пароль к сайту?). В случае
с паролями из mysql.user, они не просто имеют общее — они совпадают wink

Неактивен

 

#7 11.11.2009 18:22:54

DJK
Завсегдатай
Зарегистрирован: 09.08.2009
Сообщений: 32

Re: Если русский пароль у пользователя, как соединиться с БД

Тогда по полочкам:

1. В для подключения к mysql серверу есть аккаунт, допустим логин и пароль будут соответствующие test и привет.

2. Если подключаться к серверу используя клиент MySQL Query Browser (для примера),
то авторизация по указанной паре логин пароль происходит нормально.

3. А вот если использовать библиотеку libmysql и её функцию mysql_real_connection с той же парой логин-пароль, то в результате получаю Access denied.

Интересно, так что же за косяк такой. Уже всю голову сломал думавши.

Отредактированно DJK (11.11.2009 18:27:09)

Неактивен

 

#8 11.11.2009 19:01:14

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Если русский пароль у пользователя, как соединиться с БД

Сделайте SELECT password FROM mysql.user WHERE user='test' и посмотрите хэшик пароля.
Возьмите слово «привет» в разных русских кодировках и выполните
SELECT PASSWORD('привет') для них. Определите методом пристального вглядывания
правильную кодировку smile

MySQL Query Browser использует utf8 почти наверняка.

Неактивен

 

#9 11.11.2009 22:31:45

DJK
Завсегдатай
Зарегистрирован: 09.08.2009
Сообщений: 32

Re: Если русский пароль у пользователя, как соединиться с БД

спасибо, все тайное стало явью.
даже если мы пишем в формате cp1251 все преобразоввывается в utf8
как только я ковертировал пароль в utf8 сразу же подключилось

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson