PG数据库如何通过插件pgaudit做审计
一 pgaudit和postgresql版本兼容性匹配列表
pgAudit v1.5.X is intended to support PostgreSQL 13
pgAudit v1.4.X is intended to support PostgreSQL 12
pgAudit v1.3.X is intended to support PostgreSQL 11
二 安装插件pgaudit-1.4.1
下载zip包上传后解压
https://github.com/pgaudit/pgaudit/archive/refs/tags/1.4.1.zip
unzip pgaudit-1.4.1.zip
指定pg_config安装
cd pgaudit-1.4.1/
make install USE_PGXS=1 PG_CONFIG=/var/postgresql/soft/pg12.8/bin/pg_config
注意:pg_config替换成对应的绝对路径
扩展插件
参数文件postgresql.conf参数shared_preload_libraries新增pgaudit
参考pg_auto_failover高可用架构维护操作如下
https://vip.kingdee.com/article/296690452542608128
cat postgresql.conf |grep shared_preload_libraries
重启数据库服务
systemctl restart postgresql
扩展pgaudit
create extension pgaudit
三 参数说明
select name,setting from pg_settings where name ~ 'pgaudit'
pgaudit.log指定要审计的操作如下
READ: SELECT and COPY when the source is a relation or a query.
WRITE: INSERT, UPDATE, DELETE, TRUNCATE, and COPY when the destination is a relation.
FUNCTION: Function calls and DO blocks.
ROLE: Statements related to roles and privileges: GRANT, REVOKE, CREATE/ALTER/DROP ROLE.
DDL: All DDL that is not included in the ROLE class.
MISC: Miscellaneous commands, e.g. DISCARD, FETCH, CHECKPOINT, VACUUM, SET.
MISC_SET: Miscellaneous SET commands, e.g. SET ROLE.
ALL: Include all of the above.
pgaudit.log_catalog
指定所有对象都在pg_catalog中时,是否记录到审计日志。如果禁用此设置,将减少psql和pgadmin等工具在大量查询时的干扰。
pgaudit.log_client
指定日志消息对客户端(如psql)是否可见,默认值是off。
注意: pgaudit.log_level仅在pgaudit.log_client打开时才启用。
pgaudit.log_level
指定用于审计的日志级别,不允许error,fatal和panic。
注意:pgaudit.log_level只在pgaudit.log_client打开时启用,否则将使用默认值log。
pgaudit.log_level 取值如下
Severity | Usage | syslog | eventlog |
---|---|---|---|
DEBUG1…DEBUG5 | Provides successively-more-detailed information for use by developers. | DEBUG | INFORMATION |
INFO | Provides information implicitly requested by the user, e.g., output from VACUUM VERBOSE. | INFO | INFORMATION |
NOTICE | Provides information that might be helpful to users, e.g., notice of truncation of long identifiers. | NOTICE | INFORMATION |
WARNING | Provides warnings of likely problems, e.g., COMMIT outside a transaction block. | NOTICE | WARNING |
ERROR | Reports an error that caused the current command to abort. | WARNING | ERROR |
LOG | Reports information of interest to administrators, e.g., checkpoint activity. | INFO | INFORMATION |
FATAL | Reports an error that caused the current session to abort. | ERR | ERROR |
PANIC | Reports an error that caused all database sessions to abort. | CRIT | ERROR |
pgaudit.log_parameter
指定审计日志记录包括语句一起传递的参数。当参数传入时,将以csv格式包含在语句的文本之后,默认值是off。
pgaudit.log_relation
指定会话审计日志是否应该为select或dml语句中引用的每个关系对象(如table、view等)创建单独的日志条目。在不使用对象审计日志记录情况下进行详尽日志记录的一种有用的快捷方式。
pgaudit.log_statement_once
指定日志记录是包含带有语句/子语句组合的第一个日志条目的语句文本和参数,还是包含每个条目。禁用此设置将减少冗长的日志记录,但可能会使确定生成日志条目的语句变得更加困难,尽管语句/子语句对以及进程id应该足以识别与前一个条目一起记录的语句文本。
默认值是off
pgaudit.role
指定记录具有相关对象权限的role,没有默认值。
四 配置开启审计
会话审计日志记录
会话审计日志提供用户在后端执行的所有语句的详细日志,使用pgaudit.log设置启用会话日志记录。
postgres=# set pgaudit.log = 'write, ddl';
postgres=# set pgaudit.log_relation = on;
postgres=# set pgaudit.log_client=on;
select name,setting,source from pg_settings where name like 'pgaudit%';
postgres=# create table test1(a int);
CREATE TABLE
postgres=# insert into test1 values (1);
INSERT 0 1
postgres=# update test1 set a=2;
UPDATE 1
postgres=# delete from test1;
DELETE 1
postgres=# drop table test1;
DROP TABLE
日志输出如下
对象审计日志记录
影响特定关系的对象审计日志记录语句。
只支持 select,insert,update和delete命令。
对象审计日志中不包括 truncate。
创建角色keeper
create role keeper with password 'keeper'
配置pgaudit
set pgaudit.log = ''
set pgaudit.role = 'keeper'
select name,setting from pg_settings where name like 'pgaudit%'
授予tt表的select和delete权限(tt表上的任何select或delete语句都将被记录)
grant select,delete on public.tt to keeper
select * from information_schema.role_table_grants where grantee='keeper'
日志输出如下
select * from information_schema.role_table_grants where grantee='keeper';
日志输出如下
PG数据库如何通过插件pgaudit做审计
本文2024-09-23 01:13:02发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144523.html