这是关于 YSQL(基于 PostgreSQL)审计的。
YSQL 中的审计是由一个扩展提供的。默认情况下不安装此扩展,因此要使用必须首先在 YSQL 中启用。这是使用create extension 命令完成的,例如create extension if not exists pgaudit;。
这提供了审计功能,但是为了让 YSQL 执行审计,它必须被配置。 pgaudit 扩展向数据库添加了一些参数,这些参数可以在数据库启动时设置,或者由超级用户动态设置。这些参数是pgaudit.{role, log_relation, log_statement_once, log_parameter, log_level, log_catalog, log}。
例如:为了审计所有语句,执行:set pgaudit.log='ALL';
开始审核,然后select 1+1。
审计在每个 tserver 的“log”目录中的 PostgreSQL 日志文件中执行,并包含本地审计的命令。基本路径由 tserver 标志--fs-data-dirs 设置,服务器日志文件的路径为 yb-data/tserver/logs。
举个例子,我刚试过这个:
./bin/yugabyted destroy
./bin/yugabyted start
./bin/ysqlsh
CREATE EXTENSION IF NOT EXISTS pgaudit;
SET pgaudit.log='ALL';
select 1;
select 'a';
然后获取日志:
./bin/yugabyted collect_logs
进入 zip 文件,并检查 .postgresql 日志,您应该会看到如下内容:
I0603 10:36:36.737246 17050 pg_client.cc:130] S 1: Session id acquired
2022-06-03 10:37:04.029 UTC [17050] LOG: AUDIT: SESSION,1,1,MISC,SET,,,SET pgaudit.log='ALL';,<not logged>
2022-06-03 10:37:25.901 UTC [17050] LOG: AUDIT: SESSION,2,1,READ,SELECT,,,select 1;,<not logged>
2022-06-03 10:37:33.204 UTC [17050] LOG: AUDIT: SESSION,3,1,READ,SELECT,,,select 'a';,<not logged>