pgaudit 安装实践
下载
https://github.com/pgaudit/pgaudit/blob/REL9_6_STABLE/README.md
背景前提:
postgresql 安装包 目录为 :
/home/zhaowzh/pg966
1、解压pgaudit包
unzip pgaudit-REL9_6_STABLE.zip
2、mkdir -p /home/zhaowzh/pg966/contrib/pgaudit
3、将解压后的文件拷贝到 :
cp -R /home/zhaowzh/pgaudit-REL9_6_STABLE/* /home/zhaowzh/pg966/contrib/pgaudit/
4、cd /home/zhaowzh/pg966/contrib/pgaudit
make -s check
5、make install
6、配置
设置只能由超级用户修改。允许普通用户更改他们的设置将会破坏审计日志的重点。
可以全局(在postgresql.conf或使用ALTER SYSTEM ... SET),在数据库级别(使用ALTER DATABASE ... SET)或在角色级别(使用ALTER ROLE ... SET)指定设置。请注意,设置不会通过正常的角色继承继承,并且SET ROLE不会改变用户的pgAudit设置。这是角色系统的一个限制,而不是pgAudit固有的。
pgAudit扩展必须在shared_preload_libraries中加载。否则,加载时会出现错误,并且不会发生审计日志记录。另外,CREATE EXTENSION pgaudit必须在pgaudit.log设定之前调用。如果pgaudit扩展被删除并需要被重新创建,那么pgaudit.log必须首先解除扩展,否则会引发错误。
vim /usr/local/postgesql966/data/postgresql.conf 增加
#如果要安装多个扩展模块,模块间用 逗号隔开(pg_stat_statements,auto_explain,pgaudit)
shared_preload_libraries='pgaudit'
pgaudit.role='dba' #审计 记录 dba角色
下列截图中标红的地方根据实际需要配置即可。
使用log_line_prefix添加满足您的审核日志要求所需的任何其他字段。典型的日志行前缀可能是'\%m \%u \%d: '为每个审计日志提供日期/时间,用户名和数据库名称。
7、重启数据库服务
su - postgres
pg_ctl -D /usr/local/postgresql966/data -l /usr/local/postgresql966/logfile-pg restart
8、创建 审计模块
postgresql=# create extension pgaudit;
9、查看审计日志
审计日志记录是默认被记录在 pg数据库启动时指定的logs日志文件中的。 比如
注:
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 |
方案2
或下载 rpm
https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/repoview/letter_p.group.html
wget https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgaudit_96-1.0.4-1.rhel7.x86_64.rpm
ll /usr/pgsql-9.6/share/extension |grep pgaudit
ll /usr/pgsql-9.6/lib |grep pgaudit
scp [email protected]:/home/zhaowz/pgaudit_96-1.0.4-1.rhel7.x86_64.rpm /root
rpm -ivh pgaudit_96-1.0.4-1.rhel7.x86_64.rpm
cat /var/lib/pgsql/9.6/data/postgresql.conf |grep shared_preload_libraries
[[email protected] data]# vim /var/lib/pgsql/9.6/data/postgresql.conf
shared_preload_libraries='pgaudit,pg_stat_statements,auto_explain'
pgaudit.role='dba'
pgaudit.log='write,role,ddl,function,misc'
pgaudit.log_catalog=off
pgaudit.log_level=log
pgaudit.log_parameter=on
pgaudit.log_relation=on
pgaudit.log_statement_once=on
log_line_prefix='\%m \%u \%d:'
pg_stat_statements.max=1000
pg_stat_statements.track=all
重启pg服务
[[email protected] data]# sudo systemctl restart postgresql-9.6
postgresql=# create extension 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.
可以使用逗号分隔的列表来提供多个类,并且类可以通过使用一种来减少类来减少。
默认值为none。
pgaudit.log_catalog
指定在语句中的所有关系都在pg_catalog中的情况下,应该启用会话日志记录。禁用此设置将减少日志中的噪音,例如psql和PgAdmin等工具,这些工具对目录进行了大量查询。
默认值on 。
pgaudit.log_level
指定用于日志条目的日志级别 (see Message Severity Levels for valid levels) ,但注意ERROR、FATAL和PANIC。此设置用于进行回归测试,也可能对最终用户用于测试或其他目的使用。
默认值为log。
pgaudit.log_parameter
指定审核日志记录应该包含与语句传递的参数。当参数出现时,在语句文本之后,将以CSV格式包含。
缺省值off。
pgaudit.log_relation
指定会话审核日志记录是否应该为SELECT或DML语句中引用的每个关系(表、视图等)创建单独的日志项。这是在不使用对象审核日志记录的情况下进行穷举日志记录的一种有用的捷径。
缺省值已关闭。
pgaudit.log_statement_once
指定日志记录是否包含语句、文本和参数,其中包含statement/substatement组合的第一个日志条目,或与每个条目一起。禁用此设置将导致更少的日志记录,但可能会使确定生成日志项的语句变得更困难,尽管statement/substatement对和进程id应该足以标识使用上一个条目记录的语句文本。
缺省值off。
pgaudit.role
指定要用于对象审核日志记录的主角色。可以通过将多个审计角色授予主角色来定义多个审计角色。这就允许多个组负责审计日志记录的不同方面。
没有默认值。