我正在尝试使用mysql-代理来替代这样的凭据:
proxy.queries:append(1,
proto.to_response_packet({
username = "connect",
response = password.scramble(s.scramble_buffer, password.hash("cpass!1")),
charset = 8, -- default charset
database = c.default_db,
max_packet_size = 1 * 1024 * 1024
})
)这个错误是失败的:
(关键) (read_auth)字符串"/home/aabbcc/test.lua":51:必须设置.server_capabilities
如何正确设置".server_capabilities“?
发布于 2013-11-25 15:56:45
示例/教程-扰流. out文件有很多问题-我认为它与当前的mysql代理已经过时了。您需要一些常量和proto.to_response_packet调用的另一个参数:
...
local CLIENT_PROTOCOL_41 = 512 -- New 4.1 protocol
local CLIENT_SECURE_CONNECTION = 32768 -- New 4.1 authentication
local MYSQL_AUTH_CAPABILITIES = ( CLIENT_PROTOCOL_41 + CLIENT_SECURE_CONNECTION )
...
proxy.queries:append(1,
proto.to_response_packet({
username = "connect",
response = password.scramble(s.scramble_buffer, password.hash("cpass!1")),
charset = 8, -- default charset
database = c.default_db,
max_packet_size = 1 * 1024 * 1024,
server_capabilities = MYSQL_AUTH_CAPABILITIES
})
)感谢这个GitHub项目的常量- https://github.com/obrun/map-schema/blob/master/map-schema.lua
在此之后,您可能会得到另一个错误,如:
network_mysqld_proto_password_scramble: assertion `20 == challenge_len' failed由于某些原因,扰码缓冲区比它应该的长--如果打印出来,在末尾会看到空值--我们需要将其缩减到20个字符,然后才能使用它:
...
response = password.scramble((s.scramble_buffer):sub(1,20), password.hash("cpass!1")),
...https://stackoverflow.com/questions/18022156
复制相似问题