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

Postgresql审计:pgaudit安装与基本使用

下载

下载地址:

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论