有奖捉虫:行业应用 & 管理与支持文档专题 HOT

审计分类

云数据库 PostgreSQL 支持审计类型为审计极速版审计精细版。具体说明如下:
1. 审计极速版,对性能的影响最小,与原生社区 PostgreSQL 开启 log_statement=all 效果一致,除此之外审计极速版还额外记录了影响行数、执行时长。
2. 审计精细版使用 pgaudit 插件开启全审计,审计日志会记录的更详细,可以审计 SQL 类型、对象名。但相较于极速版理解成本更高,适合有特定需求的开发人员使用。
说明:
单条 SQL,如果存在子查询或函数等的对象调用关系,审计精细版会记录多条日志,分别为多个对象被调用的信息,为了避免同样的语句打印多次,第二次及以后的语句显示为previously logged,SQL类型为???
下面将基于几种不同的场景来对比审计极速版审计精细版记录的日志。
函数调用
具体的 SQL 如下:
CREATE FUNCTION a_t(integer, integer) RETURNS integer
AS 'select $1 + $2;'
LANGUAGE SQL;
select a_t(2,3);
精细审计日志如下图所示:

极速审计日志如下图所示:

表关联
具体的 SQL 如下:
create table a(id integer,name varchar);
create table b(id integer,age int);
insert into a(id,name)values(1,'anne'),(2,'bob');
insert into b(id,age)values(2,30);
select a.id,name,age from a,b where a.id=b.id;
精细审计日志如下图所示:



极速审计日志如下图所示:

子查询
精细审计日志如下图所示:

极速审计日志如下图所示:

分区表查询
表格的定义及数据插入 SQL 如下:
create table m(city int,ldate date)partition by range(ldate);
create table m_01 partition of m for values from('2023-01-01') to ('2023-02-01');
create table m_02 partition of m for values from('2023-02-01') to ('2023-03-01');
insert into m(city,ldate)values(1,'2023-01-02'),(2,'2023-02-02');
insert into m(city,ldate)values(3,'2023-01-05'),(4,'2023-02-04');
当执行如下查询语句时二者的审计日志如下:
select * from m where ldate>'2023-01-03';
精细审计日志如下图所示:

极速审计日志如下图所示:

存储过程
存储过程的定义及调用如下所示:
CREATE OR REPLACE PROCEDURE update_m(
p_city in integer,
p_ldate in date,
p_id in integer)
AS $$
BEGIN
update m
set city = p_city,
ldate = p_ldate
where city = p_id;
END; $$
LANGUAGE plpgsql;

call update_m(4,'2023-02-05',4);
审计精细版日志如下图所示:

审计极速版日志如下图所示:


记录日志说明

1. 审计极速版审计精细版记录的 SQL 语句类型与使用 log_statement = all 设置所记录的 SQL 类型一致,即会记录所有 simple query 协议和 execute 协议的 SQL。在扩展查询协议(即 extened query)的情况下,在执行阶段之前(即在解析分析或规划期间)出错的语句不会被记录。
2. 审计极速版审计精细版记录的 SQL 语句的长度默认为8192字节,超过限制长度的语句将被截断,同时该 SQL 语句的对象类型、对象名称、执行时间、影响行数也会无法展示。如您需要自定义,请在控制台修改数据库参数 tencentdb_audit_message_truncate_length。当 SQL 语句被截断后,如果该 SQL 语句为慢 SQL 或者执行失败的 SQL,您可到 云数据库 PostgreSQL 控制台 性能优化 > 慢查询分析或者错误日志中查看完整 SQL 详情。
3. 当前大版本为11的云数据库 PostgreSQL 的实例不支持影响行数的统计。
4. 因审计和慢查询使用的计时系统的差异,二者记录的 SQL 执行时间会有毫秒级差异。