mysql SET old_passwords 含义

今天看到了一个mysql的参数 old_passwords;在网上找了很久没有找到这个是什么意思!下面是在网上找到的!写下来算是一次记忆吧!
old_passwords=1之后,mysql中的password()函数会兼容mysql4.0的版本。

在4.0中,password()函数会生成16个16进制字符。
在更高版本中,password()函数生成40个16进制字符,然后在前面再加一个*。

那么怎样抛弃这个old_passwords呢?
刚才已经试过了,直接从配置文件里面删除它是不行的。
因为新的连接会调用password()生成41字符的串,来和mysql.user表中password字段保存的16字符相比较,肯定是不符的。
要想办法用新版本的password把mysql.user表中password字段更新一下才行。

幸运的是,old_passwords既是一个global的variable,又是一个session variable。


在平时mysql管理中,如果不涉及到mysql.user表的话,一般不会出现密码不匹配的情况。但是,若在升级或数据库迁徙中,特别是对不同版本(4.1是分界点)全库移植的

情况下,务必注意类似的细节问题。即:老版本如果打开了old_passwords选项的话,移植后的mysql也要打开old_password或者对密码rehash,生成新的hash密码长度。并要确保user表password字段的长度(4.1以后版本已经是 41个字节了)

你可能感兴趣的:(mysql,password,old-passwords)