一、审计功能概述
磐维数据库(PanWeiDB)提供了一套完善的安全审计机制,能够将用户对数据库的所有关键操作写入审计日志。数据库安全管理员可通过审计日志重现导致数据库现状的一系列事件,追踪非法操作的用户、时间和具体内容,满足等保合规要求。
1.1 审计功能的定位
| 维度 | 说明 |
|---|---|
| 核心目标 | 满足等保 2.0/3.0、金融行业数据安全合规要求 |
| 审计范围 | 登录/注销、DDL/DML、权限变更、参数修改、用户管理 |
| 日志存储 | 操作系统文件(非数据库表),保证审计日志的可靠性 |
| 权限控制 | 仅审计管理员(AUDITADMIN)或系统管理员可查看 |
1.2 审计日志 vs 慢 SQL 日志 vs 错误日志
| 日志类型 | 用途 | 是否可关闭 |
|---|---|---|
| 审计日志 | 安全合规、操作追溯 | 部分可关闭 |
| 慢 SQL 日志 | 性能优化、慢查询排查 | 可关闭 |
| 错误日志 | 故障排查 | 不可关闭 |
二、审计开关配置
2.1 审计总开关
| 参数 | 默认值 | 说明 |
|---|---|---|
audit_enabled | off | 审计总开关,支持动态加载,无需重启 |
# 开启审计总开关
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,系统仍会对以下三类行为进行强制审计:
- 数据库启动/停止
- 用户删除及修改
- 系统参数修改
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_logout | 7 | 用户登录/注销审计(0=关闭,7=全部开启) |
audit_database_process | 1 | 数据库启停/恢复审计 |
audit_user_locked | 1 | 用户锁定/解锁审计 |
audit_user_locked | 1 | 用户锁定/解锁审计 |
audit_grant_revoke | 1 | 权限授予/回收审计 |
audit_system_object | 67121159 | 对象 DDL 操作审计(通过位掩码控制对象类型和操作类型) |
audit_dml_state | 0 | DML 操作审计(INSERT/UPDATE/DELETE) |
audit_dml_state_select | 0 | SELECT 操作审计 |
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 使用位掩码控制审计的对象类型和操作类型:
| 对象类型 | 位值 | 操作类型 | 位值 |
|---|---|---|---|
| DATABASE | 1 | CREATE | 1 |
| SCHEMA | 2 | ALTER | 2 |
| USER | 4 | DROP | 4 |
| DATASOURCE | 8 | 不适用 | — |
# 开启所有对象的全部 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=7、audit_system_object=12295、audit_grant_revoke=1 |
| 敏感数据保护 | 使用统一审计策略,仅对敏感表开启 DML + SELECT 审计 |
| 运维审计 | 开启 audit_database_process=1、audit_user_locked=1,记录参数变更 |
| 日志空间控制 | 设置 pw_audit_space_alarm_threshold=0.85,定期调用 pg_delete_audit() 清理 |
总结
磐维数据库的审计功能提供了从粗粒度的参数化配置到细粒度的统一审计策略两种模式。建议在生产环境中优先使用统一审计策略,对敏感数据表进行精准审计,在满足合规要求的同时控制日志量。同时,建立完善的日志清理机制和空间告警策略,确保审计系统的长期稳定运行。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




