使用Lua脚本通过mysql代理停止向mysql发出查询请求。

我是Lua语言的初学者。主要的概念是当用户在MySQL中使用DROP TABLE命令时,不应该执行该命令。但是他可以像往常一样执行所有其他命令。但是我不想使用GRANTS来完成这个任务。是否有luaScript通过mysql-proxy执行此操作?

例如:

mysql> DROP TABLE T1;
Please wait for authentication

另外,LuaSql对通过mysql-proxy执行此任务有帮助吗?

希望我已经清楚地表达了这个想法。希望有人能帮我解决这个问题。提前致谢。

点赞
用户919434
用户919434

是的,你可以这样做。这里的想法是检查查询是否满足你想要过滤的要求,如果满足,则不将其发送到服务器。

function read_query(packet)
        if string.byte(packet) == proxy.COM_QUERY then
                query = packet:sub(2)
                if condition(query) then
                   proxy.response = {
                           type = proxy.MYSQLD_PACKET_OK,
                   }
                   return proxy.PROXY_SEND_RESULT
                end
        end
end

这个函数会检查 MySQL 代理收到的每个查询是否符合“condition”的要求,如果匹配则只返回一个成功信号给客户端,而不交付查询给服务器,从而有效地删除了这个查询。

2017-07-26 17:04:54