下载
下载地址:
https://www.pgaudit.org/
点击下载链接会跳转到github:
https://github.com/pgaudit/pgaudit
我们数据库版本是16,因此下载pgAudit 16.0。
github项目里也写明了 pgAudit 16.0 (PostgreSQL 16)的对应关系。
安装
解压并进入
安装:
make install USE_PGXS=1 PG_CONFIG=/usr/local/pg16/bin/pg_config
执行结果可以看到:
/usr/bin/mkdir -p '/usr/local/pg16/lib'
/usr/bin/mkdir -p '/usr/local/pg16/share/extension'
/usr/bin/mkdir -p '/usr/local/pg16/share/extension'
/usr/bin/install -c -m 755 pgaudit.so '/usr/local/pg16/lib/pgaudit.so'
/usr/bin/install -c -m 644 .//pgaudit.control '/usr/local/pg16/share/extension/'
/usr/bin/install -c -m 644 .//pgaudit--16.0.sql '/usr/local/pg16/share/extension/'
加载扩展插件
查看可用扩展:
SELECT name, default_version,installed_version FROM pg_available_extensions;
发现已有pgaudit
pgAudit 是一个需要预加载的扩展,必须在 PostgreSQL 启动时加载,而不能在运行时动态加载。
编辑postgresql.conf,添加:
shared_preload_libraries = 'pgaudit'
如果 shared_preload_libraries 已经配置了其他扩展,可以用逗号分隔:
shared_preload_libraries = 'pgaudit,other_extension'
然后重启postgresql:
pg_ctl stop -D /data/pg16
pg_ctl -D /data/pg16 start
检查预加载:
SHOW shared_preload_libraries;
然后再正式加载扩展:
create extension pgaudit;
检查:
\dx pgaudit
如果在线直接加载会遇到如下报错:
ERROR: pgaudit must be loaded via shared_preload_libraries
表明 pgAudit 扩展没有通过 shared_preload_libraries 加载。
审计日志基本使用
查看可配置参数:
select name,setting from pg_settings where name ~ 'pgaudit';
初始结果为:
name | setting
--------------------------------+---------
pgaudit.log | none
pgaudit.log_catalog | on
pgaudit.log_client | off
pgaudit.log_level | log
pgaudit.log_parameter | off
pgaudit.log_parameter_max_size | 0
pgaudit.log_relation | off
pgaudit.log_rows | off
pgaudit.log_statement | on
pgaudit.log_statement_once | off
pgaudit.role |
(11 rows)
可参考官方文档:
https://github.com/pgaudit/pgaudit/blob/master/README.md
配置审计login:
create role pgaudit with password 'Hxxxxn@123' login;
alter system set pgaudit.role = 'pgaudit';
select pg_reload_conf();
show pgaudit.role;
设置记录write,以及ddl语句:
alter system set pgaudit.log = 'write,ddl';
select pg_reload_conf();
select name,setting from pg_settings where name ~ 'pgaudit';
日志轮换
因为开审计日志,日志量较大,需要进行日志轮换以保证每个日志大小没那么大,在配置文件添加相关参数(此处连同pgaudit参数一起显示):
shared_preload_libraries = 'pgaudit'
logging_collector = on
log_directory = '/pgsql/postgresql/log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_age = 2h
log_truncate_on_rotation = on
pgaudit.log = 'write,ddl'
pgaudit.role = 'pgaudit'
然后重启数据库:
[postgres@server1 data]$ pg_ctl stop -D /data/pg16
waiting for server to shut down.... done
server stopped
[postgres@server1 data]$ pg_ctl -D /data/pg16 start
waiting for server to start....2025-02-10 15:35:07.446 CST [53727] LOG: pgaudit extension initialized
2025-02-10 15:35:07.800 CST [53727] LOG: redirecting log output to logging collector process
2025-02-10 15:35:07.800 CST [53727] HINT: Future log output will appear in directory "/pgsql/postgresql/log".
done
server started
此后可通过定时任务清理超过某个日期的日志文件。
注:日志里^M表示换行的连接
最后修改时间:2025-02-20 10:51:04
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




