我目前正在构建一个客户端,而没有使用任何库只是为了真正理解协议,当我将计算的 Auth 数据包发送到 MySQL 服务器时,我对拒绝访问的回复感到困惑。Mysql 服务器只是在我的计算机上运行的用于测试目的的本地服务器。这是我发送的信息:
测试密码是“花生”。
阶段 1 哈希= b14ab480028768cb748fd97de56144a304eb8a1a
阶段 2 哈希= fd62797ed464c2843942a9167cc0521779d68862 - 这是正确的,但在数据库中没有 *。
Salt & Stage 2 Hash = rC8/$a?Vr\W|.jN)~cVcfd62797ed464c2843942a9167cc0521779d68862
SHA1(盐 + 阶段 2 哈希) XOR 阶段 1 哈希= 4B19199ECEB929469EA89C0E942D8D5B9ACBE237
以十六进制发送到服务器进行身份验证的字符串:
\x3A\x00\x00\x01 - 标准头(有效载荷长度/序列号)
\x02\x04\x80\x00 - 兼容性标志
\x00\x00\x00\x01 - 最大数据包大小
\x08 - 字符集
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 - 23字节填充
\x72\x6F\x6F\x74\x00 - 用户名零终止
\x14 - 令牌长度(20 字节)
\x4B\x19\x19\x9E\xCE\xB9\x29\x46\x9E\xA8\x9C\x0E\x94\x2D\x8D\x5B\x9A\xCB\xE2\x37 - 令牌
当我发送这个字符串时,服务器只会发出 #28000 错误,即拒绝访问。
这可能是访问权限问题吗?一个远程用户试图获得 root 访问权限,我需要启用什么吗?
我已经更改了连接超时设置 wait_timeout / connect_timeout 等,但仍然没有乐趣,这些设置为 60 秒。
我不确定我是否应该用星号计算 SHA1(Salt + Stage 2 Hash),因为在数据库中它在密码前显示一个 *。两种方法我都试过了,还是不能验证。
我现在已经没有想法了,我唯一能想到的另一件事就是编写另一个程序来处理客户端令牌,就像 Mysql 服务器一样,但我想我会先在这里仔细检查一下。
我已经为此工作了一段时间,并且很困惑。
非常感谢任何帮助。我通常不会在论坛上发帖,所以这是一种新的体验,如果我没有遵守礼仪,请见谅。
问候
詹姆士