出于安全原因,我需要在服务器端(运行 Debian 6.0 Squeeze)记录所有可能更改 MySQL DB(v. 5.1)内容的查询以及发布它的用户。我不得不排除
- 由于性能问题的通用查询日志(它记录了所有内容,而且 IO 太多)
- 在二进制日志,因为它不记录用户的姓名。
- 使用诸如
ngrep捕获网络流量和过滤器之类的工具UPDATE,DELETE因为这会让我处理事务并且我不知道收到的查询是否真的被执行了。
我找不到任何可以让我更改 MySQL 固有日志行为的设置,因此我正在寻找其他解决方案。到目前为止,我提出了两种可能性:
- 将一般查询日志写入命名管道并将过滤器和写入器附加到管道的另一端 - 但我担心这...
- 将相关日志分别传输到服务器,但那样我必须发送查询两次(一次用于数据库,一次用于日志记录),很难确保日志与数据库同步(事务、锁等) .),并且出于安全原因,信任客户端真正发送日志可能是不明智的
背景:
- 用户通过 Java 桌面应用程序访问数据库,该应用程序打开到 MySQL 服务器的 SSH 隧道
- 我使用 EclipseLink 作为持久性提供者
- 该应用程序大量使用事务
- 服务器在共享环境中运行
您对如何执行我的日志记录有更好的想法吗?