go-sharding
go-sharding copied to clipboard
关于WritePublicKeyAuthPacket
老哥,我发现你代码中关于MySQL校验包 WritePublicKeyAuthPacket有问题, 刚刚验证通过了。 sha1v := sha1.New() enc, _ := rsa.EncryptOAEP(sha1v, rand.Reader, pub.(*rsa.PublicKey), plain, nil) data = make([]byte, 4+len(enc)) copy(data[4:], enc) return dc.writePacket(data)
通过对比,不出意外的话这个方法应该是借用的go-sql-driver中的相关代码,其中data = make([]byte, 4+len(enc); copy(data[4:], enc)相对于gaea来说是多余的,gaea在执行writePacket方法时,会在请求体data前面加上添加四个字节作为header。 此步骤有冗余,导致公共秘钥校验失败。
@lulufeiacount 由于我们这边没有用到 sha 校验,用的 native passwork,master 只是应对临时急用的需要修改并满足了我们自己mysql 8 的可用性,没有全面的测试覆盖,如果需要完善的实现你可以查看 refactor 分支,这个分支是正在重构重写的项目,已经完成了 mysql 协议部分的代码,而且配有完整的单元测试,是在 vitess 实现基础上参考 mysql 8 协议的完整实现~
小米的 route 部分代码非常乱,已经放弃在他的基础上修改了~~ 重写因为只有我一个人,也不是全职做这个,所以进度缓慢~~
BTW: 你可以抽取 mysql 目录下的代码来实现一个自定义的兼容 mysql 的服务器,这些代码已经完整兼容了 mysql 8 授权协议(NATIVE, SHA256) , main 分支已经不再维护,如果你有兴趣,可以提交 PR 我来合并
好的,我已经fork了一份。有时间的话我研究研究哈