最近很长时间没有更新了,思考了一个事情,关注了几十个技术类公众号,每天都有更新,基本都是大篇幅的解读某一技术,从入门到精通,有的没得写,从旧文章里面又翻新继续发,所以,每天能从这么多公众号里汲取的东西,接地气的东西,很少,所以我想着,把公众号当作一个技术路上的记事本,或者纠错本,记录每一个技术点。
今天的一个小问题:
laravel框架链接mysql的客户端,不支持老版本的mysql的old_password生成的短密码。
新上线的一个业务用到了laravel比较新的版本,数据库由于要调用很多之前旧的库,所以就放在一个5.5版本的mysql上了,用grant命令授权之后就配在.env配置文件里了,接着用php artisan migrate迁移数据库的时候,就出事儿了
客户端不认数据库的认证方式,连到数据库一查
原来开启了old_passwords,怪不得。
这里说一下old_passwords,这个参数呢,是mysql位了兼容4.1之前的客户端而保留的。就是说呢,开启这个old_passwords参数呢,你在添加用户的时候生成的密码是以16位加密的方式存储的,而4.1之后的客户端呢,都是采用64位加密方式存储的,这个咱们实操看一下:
关闭old_passwords之后:
那么上面的问题就清楚了,我生成密码的时候是短hash,客户端用长hash去验证,当然不识别了。
这个old_passwords呢,其实是不影响鉴定的,也就是客户端连接认证,不过比较是从别人手里接的盘子,以前的项目还有不少,所以不直接在mysql配置文件修改old_passwords,在当前连接下通过set修改,之后重新添加用户及授权,客户端再去连接没有问题了。