一个很好的数据包处理PostgreSQL数据包的Java库?

时间:2014-07-12 15:58:24

标签: postgresql networking jdbc

我应该为PostgreSQL数据库开发一个简单的服务器端代理。代理应该嗅探查询并阻止它们或让它们去,并将数据库响应发送回用户(实际上是上层客户机JDBC驱动程序)。 我想知道Java中是否有任何好的库来处理数据包(甚至更好的SQL数据包)?

提前谢谢

1 个答案:

答案 0 :(得分:3)

您不想处理"数据包"一点都不您想要处理PostgreSQL协议,它是消息的交换。这些消息通过TCP / IP传输,但如果您正在编写代理,则不应该在该级别处理它们。

我唯一知道的PostgreSQL协议实现是PgJDBC的一部分,并且只是客户端。它也不是很普遍。

您必须使用the PostgreSQL protocol documentation for reference编写自己的内容。你会发现Wireshark对解析PostgreSQL协议的支持非常有帮助。

当然,听起来你想要解析SQL 并根据SQL的内容做出决定。这需要一个能理解PostgreSQL方言的SQL解析器。我唯一知道的是PostgreSQL服务器的解析器,它不是你可以分开并插入另一个应用程序的东西,更不用说Java代码了。 PgPool-II还包含一个非常有限的解析器,但它又在C中,而不是作为一个单独的库编写。再一次,你必须自己编写。

实现prococol很容易,但实现解析器然后使用解析树结果推理SQL是非常难。不要去那里。

如果你坚持采用这种方法,你应该至少从修改PgPool-II或PgBouncer开始,而不是从头开始编写你自己的代理。

我认为一种优越的方法是实现PostgreSQL扩展,安装planner_hookpost_parse_analyze_hook以尝试检测您遇到的任何问题以及ERROR查询。或者直接修改核心代码(创建自定义PostgreSQL构建),如果你不能用钩子做你需要的东西。

总的来说,通过修复任何客户端应用程序,首先避免对此需求更为明智。 lot 更明智。特别是作为"验证"的整个概念。 SQL以确保它免费注入SQL#34;是铺位。您可以通过这种方式检测简单而明显的尝试SQL注入,拒绝多条语句和以注释结尾的语句等,但是对于合法查询不同的SQL注入攻击的广义检测并非如此真的可能。如果是,数据库服务器已经实现了它