You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取来自PostgreSQL驱动/RDS API的RDS用户访问历史及表访问情况

追踪RDS PostgreSQL实例中特定表的访问用户

一、RDS API层面的访问追踪

你提到的CloudTrail确实是追踪RDS API调用的核心方式,补充几个关键筛选点:

  • 在CloudTrail事件中筛选事件源为rds.amazonaws.com,如果是通过RDS Data API执行表操作,对应的事件名称是ExecuteStatement,可以从userIdentity字段获取调用的IAM用户/角色。
  • 对于通过AWS官方API直接操作表数据或结构的行为,CloudTrail会完整记录调用者身份,重点查看userIdentity下的arn或userName字段即可。

二、PostgreSQL驱动(客户端)的用户访问追踪

这部分需要借助PostgreSQL本身的功能和RDS的日志体系,以下是几种实用方法:

1. 开启数据库日志记录

修改RDS实例关联的参数组,调整以下参数:

  • log_statement:设置为all(记录所有SQL语句)、mod(仅记录数据修改语句)或ddl(仅记录结构变更),根据需求选择;
  • log_connections:设为on,记录所有新连接的用户;
  • log_disconnections:设为on,记录连接断开的用户。

日志会同步到CloudWatch Logs,在对应的日志组中搜索包含目标表名的日志条目,日志里会显示user=[你的PostgreSQL用户名],直接对应驱动端的访问用户。注意:如果业务量较大,建议临时开启或配合log_min_duration_statement(设置为非0值,仅记录执行时间超过该值的语句)来控制日志量。

2. 实时查看活跃会话

使用PostgreSQL内置的pg_stat_activity视图,实时查询当前正在访问目标表的用户:

SELECT usename AS postgres_user, 
       query AS executed_sql, 
       client_addr AS client_ip
FROM pg_stat_activity
WHERE query LIKE '%your_target_table%' 
  AND state = 'active';

这个方法只能获取当前活跃的访问会话,无法追溯历史操作。

3. 自定义触发器追踪表访问

如果需要精准记录特定表的所有读写操作(包括历史记录),可以创建触发器和日志表:

-- 1. 创建存储访问记录的日志表
CREATE TABLE table_access_log (
    log_id SERIAL PRIMARY KEY,
    accessed_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    accessing_user TEXT NOT NULL,
    operation_type TEXT NOT NULL, -- 记录INSERT/UPDATE/DELETE等操作
    target_table TEXT NOT NULL
);

-- 2. 创建触发器函数
CREATE OR REPLACE FUNCTION log_table_access()
RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO table_access_log (accessing_user, operation_type, target_table)
    VALUES (current_user, TG_OP, TG_TABLE_NAME);
    RETURN NULL;
END;
$$ LANGUAGE plpgsql;

-- 3. 给目标表绑定触发器(覆盖INSERT/UPDATE/DELETE操作)
CREATE TRIGGER track_target_table_access
AFTER INSERT OR UPDATE OR DELETE ON your_target_table
FOR EACH ROW EXECUTE FUNCTION log_table_access();

之后查询table_access_log表,就能看到所有访问该表的PostgreSQL用户、操作类型和时间。

4. 利用RDS Performance Insights

如果你的RDS实例开启了Performance Insights,可以在控制台中:

  • 切换到"Top SQL"标签,搜索包含目标表名的SQL语句;
  • 查看对应的"User"维度,即可找到执行这些语句的PostgreSQL用户。

内容的提问来源于stack exchange,提问作者7uper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:25:31