如何确保保留有关 MySQL 表数据的所有日志,但过滤由 localhost GCP SQL 生成的 Google Cloud SQL 维护查询日志?

如何确保保留有关 MySQL 表数据的所有日志,但过滤由 localhost GCP SQL 生成的 Google Cloud SQL 维护查询日志?

我为 Google Cloud SQL MySQL 实例启用了 General_log 标志,以获取 Google Cloud Logging 中的所有查询日志。我获取了用户发出的所有查询,以及每秒探测和维护实例的所有查询。这些查询由 Google Cloud SQL 从 localhost 发出。来自 localhost 的这些日志每天大约有 256 mb 的数据。

我不确定是否可以使用日志路由器接收器中的正则表达式排除来自本地主机的所有日志(也许坏人可以获得本地主机访问权限...),所以我开始制作大量正则表达式来精确排除大部分本地主机日志。它工作得很好,本地主机日志现在每天只有大约 10mb。

但我担心来自 localhost 的查询将来可能会发生变化。我想要获取所有日志并监控的表是用户桌子。

因此,我想也许我可以排除除包含字符串“users”之外的所有本地主机日志。我看到在 stackoverflow 上不使用名称从表中获取数据的一种方法是使用视图。所以也许我可以排除包含“用户”和“视图”的本地主机查询日志……

有没有其他方法可以让恶意行为者在不使用查询中的“视图”或“用户”字符串的情况下获取表行数据?

我希望将来不必维护所有这些正则表达式......

谢谢你!

例如,以下是我已经使用特定排除正则表达式过滤掉的查询日志:

2024-02-02T13:19:39.469512Z root [root] @ [127.0.0.1]55555 7777777777 查询 SELECT @@version

2024-02-02T13:19:55.817843Z root [root] @ [127.0.0.1]55555 7777777777 查询 INSERT INTO mysql.heartbeat(id,master_time)VALUE(1,UTC_TIMESTAMP(6))ON DUPLICATE KEY UPDATE master_time = UTC_TIMESTAMP(6)

系统生成的查询日志类型非常多,如果您需要更多示例,请告诉我。

现在我使用正则表达式对它们进行过滤,如下所示:

textPayload=~("^........................... root[root] @ [127.0.0.1]..... 7777777777 查询 SELECT @@version$")

相关内容