老旧Postgres 9.2数据库表频繁被删问题排查求助
PostgreSQL 9.2 频繁删表问题排查思路
针对你描述的Confluence后端PostgreSQL 9.2频繁被删表的情况,结合系统环境(老旧应用+Windows Server 2022),给出以下排查方向:
1. 补全PostgreSQL日志细节,定位操作源
当前日志仅记录了SQL操作,但缺失关键的操作用户、客户端IP信息,必须先完善日志配置:
- 修改
postgresql.conf,启用以下参数:
重启PostgreSQL服务后,后续日志会完整记录每个操作的发起用户、客户端IP、应用名称,直接定位删表请求的来源。log_connections = on log_disconnections = on log_line_prefix = '%t [%p]: [%c-%l] user=%u,db=%d,app=%a,client=%h ' log_statement = 'all'
2. 审计PostgreSQL权限配置
- 检查Confluence使用的数据库用户权限:该用户仅需
CREATE、SELECT、INSERT、UPDATE、DELETE权限,绝对不能拥有SUPERUSER或DROP TABLE/ALTER TABLE权限。执行以下SQL确认:SELECT usename, usesuper, usecreatedb, usecreaterole FROM pg_user WHERE usename = '你的Confluence数据库用户名'; SELECT table_name, privilege_type FROM information_schema.table_privileges WHERE grantee = '你的Confluence数据库用户名'; - 排查
pg_hba.conf:检查是否存在宽松的连接规则(如0.0.0.0/0允许所有IP连接),或使用trust弱认证方式(无需密码即可连接),这类配置极易被利用。 - 清理可疑用户:删除数据库中未使用的测试用户、匿名用户,确保仅保留业务必需的账号。
3. 排查应用层(Confluence+IIS)漏洞
- 你的Confluence版本已使用10年,大概率存在未修复的SQL注入或权限提升漏洞:对比官方安全公告,确认版本是否存在已知可执行恶意SQL的漏洞。
- 深度分析IIS日志:过滤包含
DROP、ALTER、SELECT.*FROM pg_class等敏感关键字的请求,排查是否有陌生IP发起的异常请求;同时检查请求的User-Agent、Referer字段,识别非Confluence官方客户端的访问。 - 监控服务器进程:使用Windows的Process Monitor跟踪PostgreSQL进程的网络连接和本地交互,排查是否有可疑进程通过本地连接执行删表操作。
4. 排查本地服务器风险
- 检查Windows登录日志:确认是否有陌生账号登录服务器,或管理员账号在非工作时间的异常登录记录。
- 检查本地脚本与备份:排查服务器上的定时任务、批处理脚本,是否存在被篡改的自动删表逻辑;同时确认数据库备份文件是否被恶意删除或篡改。
- 扫描服务器恶意软件:使用杀毒软件或EDR工具扫描服务器,排查是否存在后门、挖矿程序等恶意软件,这类程序可能通过本地权限操作数据库。
5. 先执行应急止损措施
- 立即回收Confluence数据库用户的
DROP、ALTER权限:REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM '你的Confluence数据库用户名'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE ON ALL TABLES IN SCHEMA public TO '你的Confluence数据库用户名'; - 临时收紧
pg_hba.conf:仅允许Confluence服务器IP和本地可信IP连接PostgreSQL,注释掉其他宽松规则。 - 启用定时自动备份:配置PostgreSQL的
pg_dump定时任务,每小时备份一次数据库,避免数据丢失。
内容的提问来源于stack exchange,提问作者Andrew Samokish
相关产品推荐
相关产品推荐

