暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

磐维数据库审计日志(Audit Log)配置

刘旭 2026-05-06
101

一、审计功能概述

磐维数据库(PanWeiDB)提供了一套完善的安全审计机制,能够将用户对数据库的所有关键操作写入审计日志。数据库安全管理员可通过审计日志重现导致数据库现状的一系列事件,追踪非法操作的用户、时间和具体内容,满足等保合规要求。

1.1 审计功能的定位

维度说明
核心目标满足等保 2.0/3.0、金融行业数据安全合规要求
审计范围登录/注销、DDL/DML、权限变更、参数修改、用户管理
日志存储操作系统文件(非数据库表),保证审计日志的可靠性
权限控制仅审计管理员(AUDITADMIN)或系统管理员可查看

1.2 审计日志 vs 慢 SQL 日志 vs 错误日志

日志类型用途是否可关闭
审计日志安全合规、操作追溯部分可关闭
慢 SQL 日志性能优化、慢查询排查可关闭
错误日志故障排查不可关闭

二、审计开关配置

2.1 审计总开关

参数默认值说明
audit_enabledoff审计总开关,支持动态加载,无需重启
# 开启审计总开关
gs_guc set -N all -I all -c "audit_enabled=on"

# 关闭审计总开关
gs_guc set -N all -I all -c "audit_enabled=off"

# 验证配置
SHOW audit_enabled;

重要说明:即使 audit_enabled=off,系统仍会对以下三类行为进行强制审计:

  1. 数据库启动/停止
  2. 用户删除及修改
  3. 系统参数修改

2.2 审计空间告警

pw_audit_space_alarm_threshold 参数用于设置审计日志目录的空间使用率告警阈值:

# 设置空间使用率达 85% 时打印告警
gs_guc set -N all -I all -c "pw_audit_space_alarm_threshold=0.85"

通过函数查询是否超限:

-- 返回 "1" 表示已超限,"0" 表示正常
SELECT pg_audit_logsize_warning();

2.3 权限说明

场景可查看审计日志的用户
未开启三权分立(默认)初始用户、系统管理员
开启三权分立 enable_separation_of_duty=on仅审计管理员(AUDITADMIN)
-- 查看当前三权分立状态
SHOW enable_separation_of_duty;

-- 创建审计管理员用户
CREATE USER audit_admin WITH AUDITADMIN PASSWORD 'SecurePass@2026';

三、审计策略配置(传统参数方式)

磐维数据库通过一系列独立的 GUC 参数来精细化控制审计范围,所有参数均支持动态加载gs_guc reload),无需重启数据库。

3.1 审计参数速查表

参数默认值作用
audit_login_logout7用户登录/注销审计(0=关闭,7=全部开启)
audit_database_process1数据库启停/恢复审计
audit_user_locked1用户锁定/解锁审计
audit_user_locked1用户锁定/解锁审计
audit_grant_revoke1权限授予/回收审计
audit_system_object67121159对象 DDL 操作审计(通过位掩码控制对象类型和操作类型)
audit_dml_state0DML 操作审计(INSERT/UPDATE/DELETE)
audit_dml_state_select0SELECT 操作审计
audit_user*指定审计的用户范围(* 表示所有用户)

3.2 配置示例

# 1. 开启用户登录/注销审计
gs_guc reload -N all -I all -c "audit_login_logout=7"

# 2. 开启 DML 审计(INSERT/UPDATE/DELETE)
gs_guc reload -N all -I all -c "audit_dml_state=7"

# 3. 开启 SELECT 审计
gs_guc reload -N all -I all -c "audit_dml_state_select=7"

# 4. 仅审计指定用户的操作
gs_guc reload -N all -I all -c "audit_user='app_user,ops_user'"

# 5. 关闭 DML 审计(日志量较大,谨慎开启)
gs_guc reload -N all -I all -c "audit_dml_state=0"
gs_guc reload -N all -I all -c "audit_dml_state_select=0"

3.3 DDL 对象审计详解

audit_system_object 使用位掩码控制审计的对象类型和操作类型:

对象类型位值操作类型位值
DATABASE1CREATE1
SCHEMA2ALTER2
USER4DROP4
DATASOURCE8不适用
# 开启所有对象的全部 DDL 审计(CREATE + ALTER + DROP)
gs_guc reload -N all -I all -c "audit_system_object=12295"

# 验证当前配置
SHOW audit_system_object;

四、统一审计策略(精细化管控)

传统参数方式存在审计粒度粗、日志量大等问题。磐维数据库提供了基于资源标签的统一审计策略,可实现表级别的精准审计。

4.1 启用统一审计

# 启用统一安全策略开关(需重启数据库生效)
pw_guc set -D /data/panweidb/data -c "enable_security_policy=on"

# 配置系统日志(在 /etc/rsyslog.conf 中添加)
# local0.* /var/log/localmessage
# 然后重启 rsyslog 服务
systemctl restart rsyslog

4.2 创建资源标签

资源标签将审计目标(表/视图/函数等)绑定到统一对象上进行管理:

-- 为敏感表创建资源标签
CREATE RESOURCE LABEL lbl_sensitive_data 
ADD TABLE(business.customer_info);

-- 为财务相关表创建资源标签
CREATE RESOURCE LABEL lbl_finance 
ADD TABLE(finance.transactions, finance.payments);

-- 查看已有的资源标签
SELECT labelname, objtype, objschema, objname 
FROM pg_resource_label;

4.3 创建审计策略

权限审计(PRIVILEGES)

-- 对指定标签下的所有表进行 DML/DDL 权限审计
CREATE AUDIT POLICY pol_sensitive_priv 
PRIVILEGES ALL ON LABEL(lbl_sensitive_data) 
FILTER ON ROLES(app_user, ops_user);

-- 仅审计 INSERT 和 UPDATE 操作
CREATE AUDIT POLICY pol_finance_write 
PRIVILEGES INSERT, UPDATE ON LABEL(lbl_finance)
FILTER ON ROLES(finance_user);

访问审计(ACCESS)

-- 对指定标签下的表进行 SELECT 访问审计
CREATE AUDIT POLICY pol_sensitive_access 
ACCESS SELECT ON LABEL(lbl_sensitive_data) 
FILTER ON ROLES(app_user);

管理审计策略

-- 查看所有审计策略
SELECT polname, polcomments, polenabled 
FROM pg_audit_policy;

-- 禁用审计策略(不删除,暂停生效)
ALTER AUDIT POLICY pol_sensitive_priv DISABLE;

-- 重新启用审计策略
ALTER AUDIT POLICY pol_sensitive_priv ENABLE;

-- 删除审计策略
DROP AUDIT POLICY pol_sensitive_priv;

五、审计日志查看与分析

5.1 查询审计日志

通过 pg_query_audit 函数查询指定时间段的审计记录:

-- 查询指定时间段的审计日志
SELECT * FROM pg_query_audit(
    '2026-04-21 08:00:00', 
    '2026-04-21 18:00:00'
);

5.2 审计日志核心字段说明

字段说明
time审计事件发生时间
type操作类型(login/logout/DDL/DML/GRANT/REVOKE 等)
result操作结果(success/failure)
username操作用户名
database操作的数据库名
client_conninfo客户端连接信息(IP、端口、驱动等)
detail_info操作详情(具体 SQL 或操作描述)
node_name执行节点名称

5.3 常用分析查询

-- 1. 查询失败的登录尝试
SELECT time, username, client_conninfo, result
FROM pg_query_audit('2026-04-21 00:00:00', '2026-04-21 23:59:59')
WHERE type = 'login_attempt' AND result = 'failure'
ORDER BY time DESC;

-- 2. 查询指定用户的所有操作记录
SELECT time, type, result, username, database, detail_info
FROM pg_query_audit('2026-04-21 08:00:00', '2026-04-21 18:00:00')
WHERE username = 'app_user'
ORDER BY time;

-- 3. 查询 DDL 操作记录
SELECT time, username, database, detail_info
FROM pg_query_audit('2026-04-21 00:00:00', '2026-04-21 23:59:59')
WHERE type IN ('CREATE', 'ALTER', 'DROP')
ORDER BY time DESC;

-- 4. 统计各类操作的数量分布
SELECT type, count(*) AS cnt
FROM pg_query_audit('2026-04-21 00:00:00', '2026-04-21 23:59:59')
GROUP BY type
ORDER BY cnt DESC;

5.4 审计日志维护

-- 删除指定时间段的审计日志(释放磁盘空间)
SELECT pg_delete_audit('2026-01-01 00:00:00', '2026-03-31 23:59:59');

-- 查询转存目录下的审计日志
SELECT pg_query_audit_dump('/backup/audit/');

六、审计日志存储路径

磐维数据库的审计日志默认存储在安装目录下:

$PGDATA/pg_audit/
├── panweidb-audit-2026-04-21_000000.csv
├── panweidb-audit-2026-04-22_000000.csv
└── ...

日志管理建议:

# 查看审计日志目录大小
du -sh /data/panweidb/data/pg_audit/

# 查看审计日志文件数量
ls -l /data/panweidb/data/pg_audit/ | wc -l

# 设置审计日志转存策略(定期清理或归档到外部存储)

七、常见问题处理

Q1:开启了审计但日志中没有记录

排查步骤:

-- 1. 确认审计总开关
SHOW audit_enabled;

-- 2. 确认具体审计项是否开启
SHOW audit_dml_state;
SHOW audit_login_logout;

-- 3. 确认查询用户是否有查看权限
-- 未开启三权分立时需系统管理员权限
SELECT rolname, rolauditadmin FROM pg_authid WHERE rolname = CURRENT_USER;

Q2:DML 审计开启后日志量暴增

优化方案:

# 方案一:关闭 DML 审计,仅保留关键操作审计
gs_guc reload -N all -I all -c "audit_dml_state=0"
gs_guc reload -N all -I all -c "audit_dml_state_select=0"

# 方案二:改用统一审计策略,仅对关键表审计
# (参见第四章 4.2-4.3 节)

Q3:审计日志磁盘空间不足

-- 1. 检查审计目录大小
-- 2. 删除过期审计日志
SELECT pg_delete_audit('2026-01-01 00:00:00', '2026-03-31 23:59:59');

-- 3. 设置空间告警阈值
gs_guc set -N all -I all -c "pw_audit_space_alarm_threshold=0.85"

八、企业级审计配置最佳实践

场景推荐配置
满足等保合规开启 audit_login_logout=7audit_system_object=12295audit_grant_revoke=1
敏感数据保护使用统一审计策略,仅对敏感表开启 DML + SELECT 审计
运维审计开启 audit_database_process=1audit_user_locked=1,记录参数变更
日志空间控制设置 pw_audit_space_alarm_threshold=0.85,定期调用 pg_delete_audit() 清理

总结

磐维数据库的审计功能提供了从粗粒度的参数化配置到细粒度的统一审计策略两种模式。建议在生产环境中优先使用统一审计策略,对敏感数据表进行精准审计,在满足合规要求的同时控制日志量。同时,建立完善的日志清理机制和空间告警策略,确保审计系统的长期稳定运行。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论