数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
关于 mysql5 改密码后不能登录问题的解答

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

关于 mysql5 改密码后不能登录的问题
                                        Felixsun
                                        2004-04-19
首先说明一下,下面描述仅限于Win系统 其它系统我没试过,

Mysql 自从4.1.1以后修改了用户密码的格式, 从16位增加到了41位, 采用了一种新的验证方法,

但4.1以前的客户端协议不支持这种方法,所以造成了不能登临的后果.
即使密码正确了不能正常登录,提示如下
#1250 - Client does not support authentication protocol requested by server; consider upgrading MySQL client


在窗口中执行:
C:\mysql\bin>mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.0-alpha-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> select password('aa');
+-------------------------------------------+
| password('aa')                            |
+-------------------------------------------+
| *DEE59C300700AF9B586F9F2A702231C0AC373A13 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql>
从上可以看出password的结果返回了一个以'*'号开头的41位字符串,而以前是16位的


Mysql官方网站给出了二种解决方法

1,使用新的客户端api,
2,强制服务器使用旧的密码方案

我首先尝试了第一种方法,从mysql5.0中拷贝libmysql.dll到php 的扩展目录中,替代了php本身附带的libmysql.dll, 但结果令人失望. Php提示装入php_mysql.dll失败:
PHP Warning:  PHP Startup: Unable to load dynamic library 'c:/php5/ext/php_mysql.dll' - 找不到指定的程序。
后来发现新版的dll中缺少了mysql_drop_db() 这一函数 :( 只有等php或mysql出更新的dll了.

第一种方法行不通,只有试试第二种方法,mysql的官方FAQ中说,需要加上-old-password这一参数,
我首先尝试 在命令行下起动mysql,
c:\mysql\bin>mysqld-nt -old-password

在另一窗口中 运行
C:\mysql\bin>mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 540 to server version: 5.0.0-alpha-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> select password('mypassword');
+------------------------+
| password('mypassword') |
+------------------------+
| 162eebfb6477e5d3       |
+------------------------+
1 row in set (0.55 sec)

mysql>

可以看出password的结果又变成16位的了,可喜的变化, ,
[省略弯路若干..........]
我在c:\windows\my.ini (xp,98,中如此,2000中应在c:\wint\下)中的"mysqld"段中加入"set-variable=old-passwords"

例:
[mysqld]
basedir=C:/mysql
set-variable=old-passwords
datadir=C:/mysql/data
[WinMySQLadmin]
Server=C:/mysql/bin/mysqld-nt.exe
user=root
password=mypassword

然后在服务管理器中起动mysql

Very Good, 一切正常,

后来我又发现,只要在mysql.user表中把password的字段长度改成16系统就自动切换到了oldpassword方式,改成改回41后 又自动换到了新的验证方式.
在这里提醒一下,更改password方式后,要重新设制一下密码并刷新一下权限(或重起mysql)




相关文章

相关软件